2013-02-26 165 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可能会有所不同。分配越多,功能越多,每个功能又增加一个分配。使用构造函数模式,方法分配由每个对象通过原型链共享,并且将更有效地利用内存。

相关问题