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

