-1

我想创建一个有很多实例的对象。这两种方式有什么区别?

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

和这个

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

1 回答 1

0

对于您期望大量的对象,我强烈推荐对象构造器模式(第一个示例)而不是闭包模式(第二个示例)。构造函数模式只会创建一个对象,一个具有 foo 属性的对象。如果你想要一个方法,你可以将该方法添加到构造函数原型中:

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

其中使用构造函数模式将分配至少三个对象。举个例子,

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

这将创建三个紧密耦合的对象。它将创建包含一个名为的属性的对象something,然后存储一个在anObject调用时创建的新函数对象,第三,它将创建包含fooand的函数环境bar。这种形式的优点是保持foobar无法访问除something但是它需要两个额外的分配,这比构造函数模式贵大约三倍,尽管使用现代引擎优化,你的里程可能会有所不同。添加的功能越多,分配越差,每个功能添加一个额外的分配。使用构造函数模式,方法分配由每个对象通过原型链共享,并且内存效率更高。

于 2013-02-26T09:06:06.750 回答