2013-04-24 188 views
1

所有的,我總是困惑於對象的__proto__prototype屬性,特別是在原型繼承鏈中,假設有一個對象名爲test,代碼如下。什麼時候使用__proto__和什麼時候使用原型

test.add();//try to call a method name add. 

在我的理解中,我畫了一張圖來演示搜索流程。但我不確定它是否正確,請幫助檢查它。謝謝。

enter image description here

糾正之後,基於該Minko Gechev的答案。

enter image description here

+0

[Java腳本中的\ _ \ _ proto \ _ \ _和prototype之間有什麼區別?](http://stackoverflow.com/questions/9959727/what-is-the-difference-between- proto-and-prototype-in​​-java-script) – Bergi 2013-04-24 18:26:20

回答

3

只有函數有prototype屬性,但任何對象都有__proto__屬性。

通常這不是一個好主意,更改__proto__屬性明確更好地使用像Object.create

下面是一個例子:

function Person() { 
} 
var proto = { bar: 'baz' }; 
Person.prototype = proto; 

這樣你用的構造函數Person創建的任何對象將有__proto__屬性引用到proto

正如總之,我們可以說:

原型屬性僅用於構造函數,它設置將用此構造函數創建的所有對象的__proto__屬性fu nction。當解釋者正在尋找給定對象foo的屬性時,它首先使用foo之後的foo.__proto__之後的那個foo.__proto__.__proto__等等,同時它找到屬性或不屬性。

+0

+1圖中的搜索流程是正確的?謝謝。 – 2013-04-24 17:26:00

+1

不完全。 'prototype'屬性僅用於構造函數。當在'foo .__ proto __.__ proto__'之後尋找一個對象的屬性時,在'foo .__ proto__'之後使用'foo',等等。 – 2013-04-24 17:27:28

+0

:)很好的回答,現在我已經糾正它。這樣對嗎? – 2013-04-24 17:32:28

相關問題