首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript setters/getters

Javascript setters/getters
EN

Stack Overflow用户
提问于 2010-03-12 22:01:06
回答 2查看 698关注 0票数 1
代码语言:javascript
复制
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;
    });
};
}

上面的代码有望为对象作者提供的任何属性(以数组形式)生成setter/getter。

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

代码语言:javascript
复制
settersGetters(['firstname', 'lastname']);
author.firstname = 'per';
author.lastname = 'olsen';

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

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-03-12 22:15:52

定义是在一个闭包中完成的,所以所有的setter都使用i的最后一个值。

改用下面的代码:

代码语言:javascript
复制
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]);
};
}
票数 1
EN

Stack Overflow用户

发布于 2010-03-12 22:09:47

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

尝试将i引用包装在函数中,并阅读闭包。尽管有很多帮助,我承认我仍然不能真正理解它们。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2433182

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档