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参考,并且在封闭件读起来。尽管所有的帮助下,我承认,我还没有真正理解他们。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top