<you don't know JS> 上卷笔记三 (constructor)

现象


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是一个非常不靠谱的引用,稍不留神会指向其他地方。
要尽量避免这些引用。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容