当我改变播放器[1] .pHand(pHand是一个包含对象的数组)时,看起来正在发生的是播放器[0] .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个单独的循环),但每次都会出现相同的结果,其中给每个玩家的最后一组牌宾语。 在控制台中,日志通常是例如:
卡{西装:&#34;心&#34;,faceValue:&#34; 10&#34;,价值:10,播放:false,img:&#34; 10Heart.png&#34; ...} < / p>
卡{西装:&#34;心&#34;,faceValue:&#34; 10&#34;,价值:10,播放:false,img:&#34; 10Heart.png&#34; ...} < / p>
卡{西装:&#34;心&#34;,faceValue:&#34; 3&#34;,价值:3,播放:false,img:&#34; 3Heart.png&#34; ...} < / p>
卡{西装:&#34;心&#34;,faceValue:&#34; 3&#34;,价值:3,播放:false,img:&#34; 3Heart.png&#34; ...} < / p>
卡{西装:&#34; Spade&#34;,faceValue:&#34; J&#34;,价值:10,玩过:false,img:&#34; JSpade.png&#34; ...} < / p>
卡{西装:&#34; Spade&#34;,faceValue:&#34; J&#34;,价值:10,玩过:false,img:&#34; JSpade.png&#34; ...} < / p>
卡{西装:&#34; Spade&#34;,faceValue:&#34; J&#34;,价值:10,玩过:false,img:&#34; JSpade.png&#34; ...} < / p>
卡{西装:&#34; Spade&#34;,faceValue:&#34; K&#34;,价值:10,播放:false,img:&#34; KSpade.png&#34; ...} < / p>
卡{西装:&#34; Spade&#34;,faceValue:&#34; K&#34;,价值:10,播放:false,img:&#34; KSpade.png&#34; ...} < / p>
卡{西装:&#34; Spade&#34;,faceValue:&#34; K&#34;,价值:10,播放:false,img:&#34; KSpade.png&#34; ...} < / p>
非常感谢任何帮助或见解:)
答案 0 :(得分:0)
Javascript通常在分配变量时使用引用,并将相同的cardDeck-Object分配给两个玩家的pH和属性。例如:
var pHand = {a:1,b:2};
var player = [];
player[0] = {};
player[1] = {};
player[0].pHand = pHand;
player[1].pHand = pHand; // we assign a REFERENCE here
console.log(player[0].pHand);
console.log(player[1].pHand);
console.log("changing value of b for player 0");
player[0].pHand.b = 3;
console.log(player[0].pHand);
console.log(player[1].pHand);
// both consolel logs above will be identical!
对于“如何克隆”js-object,您可以查看以下帖子: How do I correctly clone a JavaScript object?
只要您的对象是可序列化的(例如,不包含函数但只包含数组和对象),您可以使用它来创建一个简单的深层副本:
player[0].pHand = JSON.parse(JSON.stringify(pHand));