2012-01-28 146 views
0

EDITED對象屬性和對象原型

是什麼做的區別:

var a = function(){}; 
a.myProperty = function(){}; 

對戰:

var a = function(){}; 
a.prototype.myProperty = function(){}; 

我意識到這可能是一個愚蠢的或含糊不清的問題,但什麼我是否需要了解它們之間的區別以及何時使用它們?

+3

對象沒有'.prototype'但功能。後面的代碼將不起作用 – Esailija 2012-01-28 22:51:22

回答

0

請注意,這個問題自第一次提出以來就進行了大量編輯,這就是爲什麼現有評論和答案沒有意義。

所有功能都有原型。附加到這些原型的方法可用於通過將該函數作爲構造函數調用而創建的對象的實例。所以在第二個例子中,如果你寫var o = new a();那麼你將能夠調用o.myProperty();

此外,所有函數都是對象,因此您可以根據第一個示例直接在函數本身上設置任意屬性。您還可以使用o.constructor(或成員函數中的this.constructor)從對象訪問函數。這可以用來實現C++靜態類變量的等價物。

0

沒有區別。您在對象上設置屬性。

請注意,您的第二個示例失敗,因爲您沒有將a.prototype設置爲某個值。

當然,如果您製作了a函數,那麼默認情況下它會獲得原型屬性。

而那.prototype屬性有一個特殊的屬性。如果您調用new someFunction,則返回值的[[Prototype]]someFunction.prototype

這僅適用於.prototype是函數的屬性。由於new只適用於功能。