我正在使用特定的游戏制作框架,但我认为这个问题适用于 javascript
我试图制作一个旁白脚本,以便玩家可以看到“兽人打你”。在他的屏幕底部。我想一次显示最后 4 条消息,如果他们愿意,可能允许玩家回顾日志中的 30-50 条消息。为此,我设置了对象和一个数组以将对象插入。
所以我最初设置了一些这样的变量......
servermessage: {"color1":"yellow", "color2":"white", "message1":"", "message2":""},
servermessagelist: new Array(),
当我通过操作 servermessage.color1 ... .message1 等多次使用此命令(如下)和事件调用的不同数据时...
servermessagelist.push(servermessage)
它用该数据的副本覆盖整个数组......知道为什么或我能做些什么。
因此,如果我插入 color1 “RED” 和 message1 “Rover”.. 数据是正确的,那么如果我插入
color1"yellow"和 message1 "Bus"数据是 .color1:"yellow".message1:"Bus"的两个副本
最佳答案
当你推 servermessage
进入 servermessagelist
你真的(或多或少)插入了对该对象的引用。所以对 servermessage
所做的任何更改在您引用它的任何地方都会反射(reflect)出来。听起来您想要做的是将对象的克隆推送到列表中。
声明一个函数如下:
function cloneMessage(servermessage) {
var clone ={};
for( var key in servermessage ){
if(servermessage.hasOwnProperty(key)) //ensure not adding inherited props
clone[key]=servermessage[key];
}
return clone;
}
然后每次您想将消息推送到列表中时,请执行以下操作:
servermessagelist.push( cloneMessage(servermessage) );
关于Javascript将对象插入数组会改变整个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11217188/