一圖勝千言雀监。
首先,我的理解__proto__
和 constructor
是對象(函數(shù))的一個屬性眨唬,類似指針会前,指向了其他對象。而 xxx.prototype
是一個對象匾竿。
- 對象
__proto__
屬性的指向這個對象的原型對象瓦宜,在對象實(shí)例化過程中指定。 -
prototype
即為函數(shù)對象的原型對象岭妖,普通對象沒有這個屬性临庇。 - 對象
constructor
屬性的值是這個對象的原型對象“繼承”過來的反璃,所以對象和這個對象的原型對象的constructor
屬性 共同指向了這個對象的構(gòu)造函數(shù)。
有點(diǎn)繞假夺,下面舉圖中 function Foo()
的例子說明版扩。
// 構(gòu)造函數(shù)Foo
function Foo(name) {
this.name = name
};
// 通過Foo構(gòu)造函數(shù)創(chuàng)建出兩個對象實(shí)例
let f1 = new Foo('f1');
let f2 = new Foo('f2');
// 這兩個對象實(shí)例都是從Foo構(gòu)造函數(shù)的原型對象繼承而來的,它們的原型對象相同侄泽,所以__proto__指向也相同。
console.log(f1.__proto__ === f2.__proto__);
// 這兩個對象實(shí)例的原型對象與構(gòu)造函數(shù)的原型對象相同
console.log(f1.__proto__ === Foo.prototype);
console.log(f2.__proto__ === Foo.prototype);
這篇文章講得很透徹蜻韭,包括Object
與 Function
誰先出現(xiàn)的雞蛋問題悼尾。