我有以下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);
}
}
“oReg item#”的#name应该是a,b等 我认为它应该以{{1}}开头,但我无法解决。
答案 0 :(得分:3)
它应该是s
而不是i
,但不幸的是,由于“infamous loop problem”而不是那么简单。您必须在每次迭代(函数创建范围)上创建新范围,以便能够保持对s
的每个值的引用。否则,您的setter将始终返回最后一个对象键的值。
以下代码应该这样做:
for (var s in oReg) {
oReg[s].set = (function(key) {
return function() {
alert('#name of oReg item#: ' + key);
}
}(s));
}
答案 1 :(得分:0)
我知道很多人会在代码中看到对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);}");
}
答案 2 :(得分:0)
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);
}
我想你试着这样做。