我想创建一个有很多实例的对象。这两种方式有什么区别?
function anObject(foo,bar){
this.foo = bar;
yada yada
};
和这个
var anObject = function(foo, bar){
var foo;
var bar;
this.something = function...
}
我想创建一个有很多实例的对象。这两种方式有什么区别?
function anObject(foo,bar){
this.foo = bar;
yada yada
};
和这个
var anObject = function(foo, bar){
var foo;
var bar;
this.something = function...
}
对于您期望大量的对象,我强烈推荐对象构造器模式(第一个示例)而不是闭包模式(第二个示例)。构造函数模式只会创建一个对象,一个具有 foo 属性的对象。如果你想要一个方法,你可以将该方法添加到构造函数原型中:
anObject.prototype.something = function () {
// do something
}
其中使用构造函数模式将分配至少三个对象。举个例子,
function anObject(foo, bar) {
this.something = function () {
// do something
};
}
这将创建三个紧密耦合的对象。它将创建包含一个名为的属性的对象something
,然后存储一个在anObject
调用时创建的新函数对象,第三,它将创建包含foo
and的函数环境bar
。这种形式的优点是保持foo
和bar
无法访问除something
但是它需要两个额外的分配,这比构造函数模式贵大约三倍,尽管使用现代引擎优化,你的里程可能会有所不同。添加的功能越多,分配越差,每个功能添加一个额外的分配。使用构造函数模式,方法分配由每个对象通过原型链共享,并且内存效率更高。