美文网首页
<you don't know JS> 上卷

<you don't know JS> 上卷

作者: CJ_景元 | 来源:发表于2018-01-30 12:06 被阅读138次

现象


JavaScript的原型链常用的部分如下图:

原型链局部图

很多人,包括我之前对此的理解就是一个三角形关系。

构造函数Foo生成实例对象f1,实例对象f1经过_proto_继承原型对象Foo.prototype的属性和方法。
构造函数Foo的属性prototype指向原型对象,原型对象的属性constructor指向构造函数。

看了这本书才知道原来还有这样的事:

function Foo() {
// ...
}
Foo.prototype.constructor === Foo; // true
var a = new Foo();
a.constructor === Foo; // true !!!

实例对象的.constructor竟然也指向Foo......

原来实例对象f1.constructor同样通过默认的_proto_委托指向了Foo

结论


f1.constructor是一个非常不靠谱的引用,稍不留神会指向其他地方。
要尽量避免这些引用。

相关文章

网友评论

      本文标题:<you don't know JS> 上卷

      本文链接:https://www.haomeiwen.com/subject/draqzxtx.html