現(xiàn)象
JavaScript
的原型鏈常用的部分如下圖:
很多人温算,包括我之前對此的理解就是一個三角形關(guān)系。
構(gòu)造函數(shù)
Foo
生成實例對象f1
,實例對象f1
經(jīng)過_proto_
繼承原型對象Foo.prototype
的屬性和方法窒朋。
構(gòu)造函數(shù)Foo
的屬性prototype
指向原型對象,原型對象的屬性constructor
指向構(gòu)造函數(shù)蝗岖。
看了這本書才知道原來還有這樣的事:
function Foo() {
// ...
}
Foo.prototype.constructor === Foo; // true
var a = new Foo();
a.constructor === Foo; // true !!!
實例對象的.constructor
竟然也指向Foo
......
原來實例對象f1.constructor
同樣通過默認(rèn)的_proto_
委托指向了Foo
侥猩。
結(jié)論
f1.constructor
是一個非常不靠譜的引用,稍不留神會指向其他地方抵赢。
要盡量避免這些引用欺劳。