【发布时间】:2016-02-11 00:02:04
【问题描述】:
似乎正在发生的事情是当我更改 player[1].pHand 时 player[0].pHand 正在更改(pHand 是一个包含对象的数组)
for(var j = 0; j < 2; j++){
console.log(cardDeck[deckCounter]);
player[0].pHand[j] = cardDeck[deckCounter];
player[0].cardNumber ++;
console.log(player[0].pHand[j]);
deckCounter ++;
}
for(var k = 0; k < 2; k++){
console.log(cardDeck[deckCounter]);
player[1].pHand[k] = cardDeck[deckCounter];
player[1].cardNumber ++;
console.log(player[1].pHand[k]);
console.log(player[0].pHand[k]);
deckCounter ++;
}
为了便于解释,我稍微更改了代码(我会为玩家索引设置一个循环,而不是 2 个单独的循环),但每次都会出现相同的结果,其中给每个玩家的最后一组卡片目的。 在控制台中,日志通常是例如:
卡片{花色:“Heart”,faceValue:“10”,价值:10,打出:false,img:“10Heart.png”…}
卡{花色:“Heart”,faceValue:“10”,价值:10,打出:false,img:“10Heart.png”…}
卡片{花色:“Heart”,faceValue:“3”,value:3,打出:false,img:“3Heart.png”…}
卡片{花色:“Heart”,faceValue:“3”,value:3,打出:false,img:“3Heart.png”…}
卡{花色:“黑桃”,面值:“J”,价值:10,出牌:假,img:“JSpade.png”…}
卡{花色:“黑桃”,面值:“J”,价值:10,出牌:假,img:“JSpade.png”…}
卡{花色:“黑桃”,面值:“J”,价值:10,出牌:假,img:“JSpade.png”…}
卡{花色:“黑桃”,面值:“K”,价值:10,出牌:假,img:“KSpade.png”…}
卡{花色:“黑桃”,面值:“K”,价值:10,出牌:假,img:“KSpade.png”…}
卡{花色:“黑桃”,面值:“K”,价值:10,出牌:假,img:“KSpade.png”…}
任何帮助或见解将不胜感激:)
【问题讨论】:
-
这并不奇怪,因为您将两者都设置为
cardDeck[deckCounter],这可能是完全相同的对象。在两个数组中对同一个对象的引用意味着在一个地方更改该对象,在它引用的其他地方也更改它。 -
如果您不想将一个对象的更改反映到另一个分配的对象中,那么您必须先克隆该对象,然后再将其分配给另一个对象。
标签: javascript arrays loops object