2014-06-27 46 views
-3

考慮:將原型添加到函數中意味着什麼?

var x = function() { 

}; 
x.prototype = { abc: 25 }; 

有人能向我解釋這是什麼意思。這可以在沒有.prototype的函數中完成嗎?

var x = function() { 
    // something here ? 
}; 
+0

下面應該解釋很多:http://stackoverflow.com/questions/16063394/prototypical-inheritance-writing-up/16063711#16063711原型保存內存和CPU以及使您能夠使用可識別的OO模式 – HMR

+0

您可以在構造函數中執行'this.abc = 25',這大致相同。 –

回答

2

原型是多麼的類模型工作在JavaScript的 - 你已經創建了一個類x具有財產abc默認爲25

var obj = new x(); 
alert(obj.abc); // 25 

功能x是類的構造函數,它當該類的新實例被創建並且可以初始化它時被調用。這意味着,當然,你可以只設置abc屬性有:

var x = function() 
{ 
    this.abc = 25; 
}; 
var obj = new x(); 
alert(obj.abc); // 25 

這就是所謂但是不太有效的方法:

  • 你必須處理創建,而不是設置在屬性中的每個對象原型一次又一次。
  • 該屬性存儲在每個對象上,每次都消耗內存,而不是在原型上存儲一次。

ECMAScript的和諧有nicer syntax定義類和原型,不過這個人是不是在任何瀏覽器中實現尚未:

class x { 
    constructor() { 
    ... 
    } 

    public abc = 25; 
} 

這相當於你的代碼定義的雛形,只是將相關的操作好一點。

+0

因此,定義函數時我無法做到這一點?我需要稍後添加原型? –

+0

是的。我不會叫x類,但它是一個構造函數 –

+0

@SamanthaJ:我更新了我的答案。總結:不,你不能一次定義構造函數和原型,儘管計劃中有更好的語法。是的,你可以在構造函數中定義屬性,但這種方法有缺點。 –