所有的,我總是困惑於對象的__proto__
和prototype
屬性,特別是在原型繼承鏈中,假設有一個對象名爲test
,代碼如下。什麼時候使用__proto__和什麼時候使用原型
test.add();//try to call a method name add.
在我的理解中,我畫了一張圖來演示搜索流程。但我不確定它是否正確,請幫助檢查它。謝謝。
糾正之後,基於該Minko Gechev的答案。
所有的,我總是困惑於對象的__proto__
和prototype
屬性,特別是在原型繼承鏈中,假設有一個對象名爲test
,代碼如下。什麼時候使用__proto__和什麼時候使用原型
test.add();//try to call a method name add.
在我的理解中,我畫了一張圖來演示搜索流程。但我不確定它是否正確,請幫助檢查它。謝謝。
糾正之後,基於該Minko Gechev的答案。
只有函數有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__
等等,同時它找到屬性或不屬性。
+1圖中的搜索流程是正確的?謝謝。 – 2013-04-24 17:26:00
不完全。 'prototype'屬性僅用於構造函數。當在'foo .__ proto __.__ proto__'之後尋找一個對象的屬性時,在'foo .__ proto__'之後使用'foo',等等。 – 2013-04-24 17:27:28
:)很好的回答,現在我已經糾正它。這樣對嗎? – 2013-04-24 17:32:28
[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