我正在使用特定的游戏制作框架,但我认为该问题适用于javascript
我试图制作一个旁白脚本,以便玩家可以看到“兽人击中了你”。在屏幕底部。我想一次显示最后4条消息,并且如果需要,可以允许玩家回头查看日志中的30-50条消息。为此,我设置了object和一个将对象推入的数组。
所以我最初设置了一些像这样的变量...
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) );