当我改变播放者1.pHand (pHand是一个包含对象的数组)时,player.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 ++;
} 为了便于解释,我稍微修改了代码(对于player索引我有一个循环,而不是两个单独的循环),但是每次都会发生相同的结果,最后一组卡片是给每个player对象的。例如,在控制台中,日志通常如下:
卡{套装:“心”,faceValue:"10",值: 10,播放:假,img:"10Heart.png"…}
卡{套装:“心”,faceValue:"10",值: 10,播放:假,img:"10Heart.png"…}
卡{套装:“心”,faceValue:"3",值: 3,播放:假,img:"3Heart.png"…}
卡{套装:“心”,faceValue:"3",值: 3,播放:假,img:"3Heart.png"…}
卡{套装:“黑桃”,faceValue:"J",值: 10,播放:假,img:"JSpade.png"…}
卡{套装:“黑桃”,faceValue:"J",值: 10,播放:假,img:"JSpade.png"…}
卡{套装:“黑桃”,faceValue:"J",值: 10,播放:假,img:"JSpade.png"…}
卡{套装:“黑桃”,faceValue:"K",值: 10,播放:假,img:"KSpade.png"…}
卡{套装:“黑桃”,faceValue:"K",值: 10,播放:假,img:"KSpade.png"…}
卡{套装:“黑桃”,faceValue:"K",值: 10,播放:假,img:"KSpade.png"…}
如有任何帮助或见解,将不胜感激:)
发布于 2016-02-10 15:32:41
Javascript通常在分配变量时使用引用,并且您为播放器的‘s值和属性分配了相同的cardDeck对象。例如:
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-对象,您可以查看以下文章:How do I correctly clone a JavaScript object?
只要您的对象是可序列化的(例如,不包含函数而是只包含数组和对象),您就可以使用它创建一个简单、深入的副本:
player[0].pHand = JSON.parse(JSON.stringify(pHand));https://stackoverflow.com/questions/35318926
复制相似问题