我有这个构造函数对象:
function Bindable(obj) {
var prop;
for (prop in obj) {
this.__defineGetter__(prop, function () {
return obj[prop];
});
this.__defineSetter__(prop, function (val) {
obj[prop] = val;
});
}
}
像这样被调用:
var model = new Bindable({
name: 'Dave',
level: 10,
strength: 5
});
如果我
console.log(model)
,输出为:Bindable { name=5, level=5, strength=5 }
为什么将相同的值分配给构造函数中的每个属性?
最佳答案
您正在创建一个闭包,该闭包将在执行getter / setter函数时(而不是在定义它们时)进行评估。它们执行时,prop
具有在循环执行期间分配的最后一个值。您需要避免在prop
上创建闭包。一种方法是使用IIFE。而不使用此参数:
function () {
return obj[prop];
}
采用
(function(p) {
return function() {
return obj[p];
};
}(prop));
关于javascript - 使用getter和setter将参数复制到对象实例,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17202767/