我認爲這取決於是否在內存中爲對象的每個實例創建了方法的副本。例如:
var MyObj = function(x) {
this.doStuff = function() {
//Do some stuff
};
this.someProperty = x;
};
//myInstance will have its own copy of the doStuff method
var myInstance = new MyObj(10);
在上面的代碼中,MyObj
每個實例將需要doStuff
在存儲器中的副本。然而,如果在prototype
聲明的方法,這是一個不同的故事:
var MyObj = function(x) {
this.someProperty = x;
};
MyObj.prototype.doStuff = function() {
//Do some stuff
};
//myInstance can still access doStuff, but all instances share one copy
var myInstance = new MyObj(10);
這一次,MyObj
每個實例都有自己的屬性someProperty
,但是當你調用doStuff
方法,它不是在實例中發現本身,所以prototype
被看作是在它被發現和執行的地方。
但是,如果像您所說的那樣,有些方法根本沒有被調用,我不認爲有任何理由讓它們在任何地方被聲明。就我個人而言,我會擺脫它們(除非它們有可能在未來提供價值)。但是我不知道你的代碼,所以這是你必須做出的決定。
方法是在每個實例上還是在'prototype'上聲明的?如果他們在「原型」上,則不太可能產生很大的差異,因爲所有實例都有效地共享該方法的一個副本。 – 2012-02-23 21:22:04
它們在構造函數中定義在對象上,還是通過'prototype'在實例之間共享?您必須展示一些代碼,並理想地通過性能分析器運行您的代碼以準確查看內存瓶頸的創建位置。 – zzzzBov 2012-02-23 21:23:15
@James和zzzzBov - 我已根據您的意見更新了OP(感謝您的評論)。 – TheOx 2012-02-23 21:38:23