2012-05-16 127 views
5
http://jsfiddle.net/gfuKS/5/

的javascript對象數組

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); 
}​ 

爲什麼在第二次迭代中的過渡[0] .property等於 「背景色」?

回答

10

因爲您正在存儲對transitionInitial的引用,而不是其副本。 transitionInitial指向內存中的對象,並且您在transitions[k]中存儲對此對象的引用。無論你在做什麼迭代,你總是在改變同一個對象。

0

這有什麼可做的嗎? for (var k = 0; k < rules.length; k++) 嘗試更改計時器。

3

這是因爲您的transitions數組中的值都指向同一個對象。在執行代碼期間,您將生成一個具有三個不同參考的對象(transitionInitial,transistions[0],& transistions[1])。

在循環的第一次迭代期間,transistions[0]被設置爲引用transitionInitial對象。然後該對象的property屬性設置爲值"color"。在第二次迭代期間,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); 
}​