构造器借用的继承问题

今天在读《javascript 面向对象编程指南》第6章 继承的时候,6.13节 构造器借用中有段代码为:

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

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

Triangle.prototype = new Shape(100);

var t = new Triangle(200);

书中所说,对象中有一个自身属性id,但它并非来自原型链中,然后执行了一系列操作:

> t.__proto__.id  // 100

> delete t.id

> t.id // 100

为什么这个id不是来自于原型链,我用 t.hasOwnProperty('id')发现结果为false那就说明这个id不是本身的,那既不是来自于原型链,也不是来自自身,那这个id来自于哪里,还是说这本书这里有错误?

阅读 2k
3 个回答

t自己有1个id=200,t的__proto__也就是Triangle.prototype有一个id=100。
执行delete t.id是删了t自己的id,再访问t.id的时候,其实是访问Triangle.prototype.id

是不是你理解错了,你或许可以把上下文截图出来.

hasOwnProperty只是查找当前对象下的第一层属性。

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

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

obj.hasOwnProperty('b')  // => false
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题