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