有人可以解释覆盖变量发生了什么
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.m1
和 player.m2
都引用相同的 Minion
对象。所以你对一个所做的任何改变都会反映在另一个上。您需要为它们使用单独的对象。像这样:
var Minion1 = {};
var Minion2 = {};
player.m1 = Minion1;
player.m2 = Minion2;
由于 Minion1
和 Minion2
都是空对象,如果其他地方不需要它们,您可以删除这些临时变量。
player.m1 = {}
player.m2 = {}
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.m1
和 player.m2
都引用相同的 Minion
对象。所以你对一个所做的任何改变都会反映在另一个上。您需要为它们使用单独的对象。像这样:
var Minion1 = {};
var Minion2 = {};
player.m1 = Minion1;
player.m2 = Minion2;
由于 Minion1
和 Minion2
都是空对象,如果其他地方不需要它们,您可以删除这些临时变量。
player.m1 = {}
player.m2 = {}