如何理解prototype和__proto__的差別呢?
構造函數訪問原型時,通常透過prototype來訪問,例如我們往原型上添加方法
prototype
Person.prototype.getName = function() {}
當new出來的實例存取原型時,在一些支援的瀏覽器中
function Person() {} var p1 = new Person(); p1.__proto__ === Person.prototype // true
結論:prototype是作為構造函數去訪問原型,而__proto__是作為實例去訪問原型。當自身身分不一樣,即使一個方法同時呼叫兩者時,存取到的可能是不同的原型。
__proto__
每個物件都有__proto__,而prototype只有Function有;
Function
也許你也可以看看這些:
/a/11...
https://developer.mozilla.org...
prototype 是建構子的屬性,__proto__ 是實例的屬性。使用建構子產生的實例的 __proto__ 屬性會指向建構子 prototype 屬性所指向的物件。
嗯,就是這樣。
從作用上來說:prototype 確定了當利用構造器或字面量形式定義物件時 proto 的預設值
proto 是 js 引擎原型鏈搜尋的依據
所以重點在於當你要更改原型鏈的搜尋方式時,可以透過更改建構器 prototype 來改變後續所有實例化物件的原型鏈查找方式,利用 proto 來修改單一物件的原型鏈查找.
構造函數訪問原型時,通常透過
prototype
來訪問,例如我們往原型上添加方法當new出來的實例存取原型時,在一些支援的瀏覽器中
結論:
prototype
是作為構造函數去訪問原型,而__proto__
是作為實例去訪問原型。當自身身分不一樣,即使一個方法同時呼叫兩者時,存取到的可能是不同的原型。每個物件都有
__proto__
,而prototype
只有Function
有;也許你也可以看看這些:
/a/11...
https://developer.mozilla.org...
https://developer.mozilla.org...
prototype
是建構子的屬性,__proto__
是實例的屬性。使用建構子產生的實例的__proto__
屬性會指向建構子prototype
屬性所指向的物件。嗯,就是這樣。
從作用上來說:
prototype 確定了當利用構造器或字面量形式定義物件時 proto 的預設值
proto 是 js 引擎原型鏈搜尋的依據
所以重點在於當你要更改原型鏈的搜尋方式時,可以透過更改建構器 prototype 來改變後續所有實例化物件的原型鏈查找方式,利用 proto 來修改單一物件的原型鏈查找.