2013-02-26 350 views
-1

我想創建一個有很多實例的對象。使這兩種方式有什麼區別?以這兩種方式創建對象有什麼區別?

function anObject(foo,bar){ 
    this.foo = bar; 
    yada yada 
}; 

var anObject = function(foo, bar){ 
    var foo; 
    var bar; 
    this.something = function... 
} 
+1

http://stackoverflow.com/questions/336859/javascript-var-functionname-function-vs-function-functionname – 2013-02-26 08:42:37

+0

第二個似乎無效。你重新聲明一個參數是一個局部變量。至少,這是一個壞主意。 – 2013-02-26 08:43:30

回答

0

我會強烈建議爲對象的對象的構造模式(第一個例子),在關閉模式(第二個例子),你想到了一大批。構造函數模式只會創建一個對象,一個具有foo屬性的對象。如果你想有一個方法,你能那麼方法添加到構造原型:

anObject.prototype.something = function() { 
    // do something 
} 

,其中作爲使用構造格局將至少分配三個對象。舉例來說,

function anObject(foo, bar) { 
    this.something = function() { 
     // do something 
    }; 
} 

這將創建三個緊密耦合的對象。它將創建一個名爲something的屬性的對象,然後該對象存儲一個在調用anObject時創建的新函數對象,第三,它將創建包含foobar的函數環境。這種形式的優點是可以保持foobar對除something以外的其他任何地方都不可訪問,但它需要兩個額外的分配,比構建器模式貴3倍左右,儘管使用現代化的引擎優化,您的milage可能會有所不同。分配越多,功能越多,每個功能又增加一個分配。使用構造函數模式,方法分配由每個對象通過原型鏈共享,並且將更有效地利用內存。

相關問題