5

http://jsfiddle.net/gfuKS/5/

var transitionInitial = {property: "none"};
var rules = ["color", "background-color"];
var transitions = [];
for ( var k = 0; k < rules.length; k++)
{
    transitions[k] = transitionInitial;
    transitions[k].property = rules[k];
    alert(transitions[0].property);
}​

2回目の反復でtransitions[0].propertyが"background-color"に等しいのはなぜですか?

4

3 に答える 3

10

transitionInitialのコピーではなく、への参照を保存しているためです。transitionInitialメモリ内のオブジェクトを指し、このオブジェクトへの参照をに格納していますtransitions[k]。現在の反復に関係なく、常に同じオブジェクトを変更しています。

于 2012-05-16T19:18:17.663 に答える
3

これは、transitions配列の両方の値が同じオブジェクトを指しているためです。コードの実行中に、3つの異なる参照(、、、および)を持つ1つのオブジェクトを生成transitionInitialtransistions[0]ますtransistions[1]

ループの最初の反復中に、はオブジェクトtransistions[0]を参照するように設定されtransitionInitialます。次に、propertyそのオブジェクトのプロパティが値に設定されます"color"。2回目の反復では、およびとtransitions[1]同じオブジェクトを参照するように設定されます。次に、の値をにリセットします。transitionInitialtransitions[0]property"background-color"

これを解決するには、配列インデックスごとに異なるオブジェクトを作成します。

// Not needed anymore:
// var transitionInitial = {property: "none"};
var rules = ["color", "background-color"];
var transitions = [];
for ( var k = 0; k < rules.length; k++) {
  transitions[k] = {};
  transitions[k].property = rules[k];
  alert(transitions[0].property);
}​
于 2012-05-16T19:25:21.607 に答える
0

多分これで何かすることはありますか?for ( var k = 0; k < rules.length; k++) タイマーを変更してみてください。

于 2012-05-16T19:18:07.680 に答える