题
var author = {
firstname: 'Martin',
lastname: 'Hansen'
}
function settersGetters(propStr) {
for (var i = 0; i < propStr.length; i++) {
author['_'+ propStr[i]] = null;
author.__defineGetter__(propStr[i],
function() {
return author['_'+ propStr[i]];
});
author.__defineSetter__(propStr[i],
function(val) {
author['_'+ propStr[i]] = val;
});
};
}
上面的代码将有希望产生用于所提供的任何属性设置器/吸气剂(在阵列中)为对象的作者。
但是,当我叫下面的代码双方名字和姓氏是奥尔森..我在做什么错了?
settersGetters(['firstname', 'lastname']);
author.firstname = 'per';
author.lastname = 'olsen';
console.log(author.firstname);
console.log(author.lastname);
解决方案
的定义是在闭合制成,所以所有的setters是使用i的最后一个值。
使用此来代替:
function setterGetter(property)
{
author['_'+ property] = null;
author.__defineGetter__(property,
function() {
return author['_'+ property];
});
author.__defineSetter__(property,
function(val) {
author['_'+ property] = val;
});
}
function settersGetters(propStr) {
for (var i = 0; i < propStr.length; i++) {
setterGetter(propStr[i]);
};
}
其他提示
我怀疑这是一个闭合的问题,这几个有用的人对我的此处。
尝试包裹的函数内的i
参考,并且在封闭件读起来。尽管所有的帮助下,我承认,我还没有真正理解他们。
不隶属于 StackOverflow