Javascript setter / getter

标签 javascript setter getter

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;
    });
};
}

上面的代码有望为对象作者的任何提供的属性(在数组中)生成 setters/getters。

但是当我调用下面的代码时,名字和姓氏都是 olsen..我做错了什么?

settersGetters(['firstname', 'lastname']);
author.firstname = 'per';
author.lastname = 'olsen';

console.log(author.firstname);
console.log(author.lastname);

最佳答案

我怀疑这是一个关闭问题,几个乐于助人的人向我解释了这个问题 here .

尝试将 i 引用包装在一个函数中,并阅读闭包。尽管提供了所有帮助,但我承认我仍然不太了解它们。

关于Javascript setter / getter ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2433182/

相关文章:

java - 在类构建过程中使用 setter 的缺点?

php - 如何在 PHP 中设置类变量?

javascript - 访问器属性及其函数名称

javascript - 从 subview 将新集合添加到父 View

JavaScript:定义函数和实例化对象的顺序

javascript - ES6 计算属性和嵌套模板文字

javascript - React Eslint 解构赋值

wpf - 在 Setter 中覆盖 Text 属性(或更好的方法)

c - struct 中的附加变量导致 getter 方法中返回值错误

java - 如何累积一个调用 setter 方法并以其中的变量作为参数?