我通常使用.prototype
属性扩展构造函数,让多个实例引用相同的代码(而不是使用几个相同的代码),如下所示:
function Effect(){}
Effect.prototype.run = function(){}
但是,由于我当前项目的结构,我想做这样的事情:
使用效果选项定义effects
对象:
var effects = {
e1 : {
run: function(){console.log(this);}
},
e2 : {
run: function(){console.log(this);}
}
}
使用对象定义创建效果实例
function Effect(effect) {
this.run = effect.run;
}
现在我可以创建几个实例(可能是数百个)
var E1 = new Effect(effects.e1);
var E2 = new Effect(effects.e2);
var E3 = new Effect(effects.e2);
.....
但是我担心,如果多次定义.run
函数。
这些新实例是否会引用相同的函数(在effects
对象中定义),还是会使用内存空间为每个实例创建一个新的“本地”函数?
答案 0 :(得分:1)
函数是一个对象,因此它将始终通过引用存储。将其分配给不同的变量或属性只会创建对现有函数对象的新引用,并且不会占用该变量或属性所需的内存。