有人可以解释一下覆盖变量会发生什么

时间:2015-04-19 06:15:21

标签: actionscript-3 object overwrite

var Minion = {};
var player = {};

function newGame():void
buildMinion();
buildPlayer();
trace(player.m1.minionName); // traces "Minion Two" ?!
}

我不明白为什么(player.m1.minionName)被覆盖到(player.m2.minionName)。我显然做错了什么,想了解什么。

buildMinion():void
{
Minion.minionName = "Default";
}

buildPlayer():void
{
player.m1 = Minion;
player.m2 = Minion;
player.m1.minionName = "Minion One";
player.m1.minionName = "Minion Two";
}

2 个答案:

答案 0 :(得分:1)

请仔细阅读您的代码

更改此

player.m1.minionName = "Minion One";
player.m1.minionName = "Minion Two";

到这个

player.m1.minionName = "Minion One";
player.m2.minionName = "Minion Two";

答案 1 :(得分:1)

player.m1.minionName = "Minion Two";

你这里有一个错字。这应该是@DodgerThud指出的player.m2.minionName。但是,即使您将其更改为m2,它仍然无法用作player.m1player.m2两者都引用相同的Minion对象。因此,您在一个中所做的任何更改都将反映在另一个中。您需要为它们使用单​​独的对象。像这样:

var Minion1 = {};
var Minion2 = {};

player.m1 = Minion1;
player.m2 = Minion2;

由于Minion1Minion2都是空对象,如果在其他地方不需要它们,您可以删除这些临时变量。

player.m1 = {}
player.m2 = {}