有人可以解释覆盖变量发生了什么

Can Someone Explain whats happening with overwriting variables

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";
}

请仔细阅读您的代码

改变这个

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

至此

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

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 = {}