0

このコードがあるとしましょう

var callbacks = {};
for (var i in mylist){

callbacks[i] = { callback: function(){ myFunction( myList[i].someProperty ); }};

}

上記のコードは、次のようなリストになります。

myList[0].property = "zero";
myList[1].property = "one";

このような結果:

callbacks[0].callback // -> returns myFunction("one"); WRONG!
callbacks[1].callback // -> returns myFunction("one");

関数が実行されたときではなく、ループ中に値が割り当てられるようにするためfor..in(ループ内で、無名関数内にアクセスするという事実を変更せずに)できることはありますか?myList[i].somePropertymyList[i].someProperty

4

1 に答える 1

1

keyコールバックにプロパティを設定してから、以下を参照できthis.keyます。

var myList = {
    foo: {
        someProperty: 'oof'
    },
    bar: {
        someProperty: 'rab'
    }
};

var callbacks = {};
for (var i in myList) {
    callbacks[i] = { 
        key: i, //Add a key property
        callback: function(){ 
            myFunction( myList[this.key].someProperty ); 
            // And refer to    ^^^^^^^^
        }
    };
}

function myFunction(propertyValue) {
    console.log(propertyValue);
}

callbacks['foo'].callback(); //oof
callbacks['bar'].callback(); //rab
于 2013-09-13T13:24:45.453 に答える