假设我像这样创建一个对象工厂:
var newObj=function(x){
var obj=[]
obj.x=x
obj.add=function(n){
return this.x+n
}
return obj
}
现在假设我创建了该对象的数百个实例:
var obj1=newObj(1)
var obj2=newObj(2)
...
每个 obj1、obj2、... 是否存储它们自己的 obj.add 副本,或者它们是否都包含对存储在内存中的 obj.add 单个实例的引用?
谢谢!
最佳答案
obj
和obj2
都会实例化它们自己的obj.add
副本。它们是在创建时执行并在对象的生命周期内存储在内存中的函数表达式。
如果你想保持性能,你应该使用prototyping :
var newObj=function(x){
this.obj = [];
this.obj.x = x;
return this.obj;
}
newObj.prototype.add = function(n) {
return this.obj.x += n;
}
这将创建一个函数,所有 future 的 newObj
对象都将使用该函数,而不会为完全相同的函数占用额外的内存空间。
关于javascript - 匿名函数存储效率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17513584/