鍍金池/ 問答/HTML/ 構(gòu)造器借用的繼承問題

構(gòu)造器借用的繼承問題

今天在讀《javascript 面向?qū)ο缶幊讨改稀返?章 繼承的時(shí)候,6.13節(jié) 構(gòu)造器借用中有段代碼為:

function Shape(id){
    this.id = id;
}

function Triangle(){
    Shape.apply(this,arguments);
}

Triangle.prototype = new Shape(100);

var t = new Triangle(200);

書中所說,對(duì)象中有一個(gè)自身屬性id,但它并非來自原型鏈中,然后執(zhí)行了一系列操作:

> t.__proto__.id  // 100

> delete t.id

> t.id // 100

為什么這個(gè)id不是來自于原型鏈,我用 t.hasOwnProperty('id')發(fā)現(xiàn)結(jié)果為false那就說明這個(gè)id不是本身的,那既不是來自于原型鏈,也不是來自自身,那這個(gè)id來自于哪里,還是說這本書這里有錯(cuò)誤?

回答
編輯回答
未命名

hasOwnProperty只是查找當(dāng)前對(duì)象下的第一層屬性。

// eg.
var obj = { 
    a: { b: '123' }
 }

obj.hasOwnProperty('a')  // => true

obj.hasOwnProperty('b')  // => false
2017年9月20日 05:24
編輯回答
遲月

t自己有1個(gè)id=200,t的__proto__也就是Triangle.prototype有一個(gè)id=100。
執(zhí)行delete t.id是刪了t自己的id,再訪問t.id的時(shí)候,其實(shí)是訪問Triangle.prototype.id

2018年3月31日 14:24
編輯回答
敢試

是不是你理解錯(cuò)了,你或許可以把上下文截圖出來.

2018年9月23日 16:31