为什么为不同的对象分配相同的值?

时间:2014-04-25 07:05:01

标签: javascript

为什么不同的对象plyers [o]和plyers [1]被赋予相同的值?虽然应该有1

的差异
var player = {
    'money': 1,
    'increase' : 10
}

var players = [];


for (var i=0;i<2;i++){
    players[i] = player;
}
for (var i=0;i<3;i++){
    for (var j=0;j<players.length;j++){
        players[j]['money'] += (players[j]['increase']+j)
        console.log(players[0].money + ' ___0')
        console.log(players[1].money + ' ___1')
    }
}

console:

11 ___0 
11 ___1 
22 ___0 
22 ___1 
32 ___0 
32 ___1 

1 个答案:

答案 0 :(得分:2)

当你这样做时

players[i] = player;

您没有创建player的副本并将其分配给players[i],但使players[i]引用player对象。因此,数组的所有元素都指向同一个对象。

您可能想要做的是克隆对象,例如

players[i] = JSON.parse(JSON.stringify(player));

注意:我提到的克隆方法只有在对象中没有函数且没有继承链时才能正常工作。您可以按照this question了解有关克隆JavaScript对象的其他方法的更多信息。