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