javascript对象项名称



我有以下javascript代码:

var oReg = new Object;
oReg.a = {size: 762, content: 0};
oReg.b = {size: 342, content: 0};
//...
for (var s in oReg) {
    oReg[s].set = function(i) {
        alert('#name of oReg item#: ' + i);
    }
}

其中"#name of oReg item#"应为a、b等
我认为应该从this开始,但我搞不清楚。

它应该是s而不是i,但不幸的是,由于"臭名昭著的循环问题",它并没有那么简单。您必须在每次迭代中创建一个新的作用域(函数创建作用域(,以便能够保留对s的每个值的引用。否则,您的setter将始终返回最后一个对象键的值。

以下代码应该可以做到这一点:

for (var s in oReg) {
    oReg[s].set = (function(key) {
        return function() {
            alert('#name of oReg item#: ' + key);
        }
    }(s));
}

我知道很多人看到代码中对eval的调用会哭,但只有当用户输入时,这才是真正危险的。因此:

var oReg = new Object;
oReg.a = {size: 762, content: 0};
oReg.b = {size: 342, content: 0};
for (var s in oReg) {
    eval("oReg[s].set = function(i){alert('oReg."+s+": ' + i);}");
}
var oReg = new Object;
oReg.a = {size: 762, content: 0};
oReg.b = {size: 342, content: 0};
//...
for (var s in oReg) {
    oReg[s].set = (function(s) {
        alert('#name of oReg item#: ' + s);
    })(s);
}

我认为你在尝试这样做。

最新更新