-1

次の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# の名前」はどこにあるのか、a、b など
にする必要がありますthis

4

3 に答える 3

3

sの代わりになるはずですiが、残念ながら「悪名高いループ問題」のため、それほど単純ではありません。の各値への参照を保持できるようにするには、反復ごとに新しいスコープを作成する必要があります (関数はスコープを作成します) s。それ以外の場合、セッターは常に最後のオブジェクト キーの値を返します。

次のコードでそれを行う必要があります。

for (var s in oReg) {
    oReg[s].set = (function(key) {
        return function() {
            alert('#name of oReg item#: ' + key);
        }
    }(s));
}
于 2013-03-31T22:37:45.210 に答える
0

多くの人が in code の呼び出しを見て泣き始めることは知っていますが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);}");
}
于 2013-03-31T22:40:34.333 に答える
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);
}

私はあなたがこれをやろうとしていると思います。

于 2013-03-31T22:42:31.603 に答える