为什么 (myMC.myArray = myOtherMC.myOtherArray;) 会导致对 myMC.myArray 的任何更改也会更改 myOtherMC.myOtherArray?
Why does (myMC.myArray = myOtherMC.myOtherArray;) cause any changes to myMC.myArray to also change myOtherMC.myOtherArray?
var myArray:Array = new Array();
var myMC:MovieClip = new MovieClip();
myMC.myArray = myArray;
trace(myMC.myArray[10]); //Output: undefined
var newMC:MovieClip = new MovieClip();
newMC.myOtherArray = myMC.myArray;
newMC.myOtherArray[10] = [];
newMC.myOtherArray[10][0] = 100;
trace(myMC.myArray[10]); //Output: 100
为什么会这样,有什么办法可以避免吗?
编辑:
找到一个可以克隆关联数组的函数here。
这里是函数(来自上面link):
function clone(source:Object):*
{
var myBA:ByteArray = new ByteArray();
myBA.writeObject(source);
myBA.position = 0;
return(myBA.readObject());
}
让函数return类型为“*”是否意味着它可以是任何类型?或者它是 objects/arrays 特有的东西?
这是因为您将原始数组的引用传递给了新剪辑。作为对象的数组不是基元,因此将始终被引用。
如果你想克隆一个数组,保持原样不变,使用这个方法:
var b:Array = a.concat();
b 将是一个新数组。 a可以修改不改b.
var myArray:Array = new Array();
var myMC:MovieClip = new MovieClip();
myMC.myArray = myArray;
trace(myMC.myArray[10]); //Output: undefined
var newMC:MovieClip = new MovieClip();
newMC.myOtherArray = myMC.myArray;
newMC.myOtherArray[10] = [];
newMC.myOtherArray[10][0] = 100;
trace(myMC.myArray[10]); //Output: 100
为什么会这样,有什么办法可以避免吗?
编辑:
找到一个可以克隆关联数组的函数here。
这里是函数(来自上面link):
function clone(source:Object):*
{
var myBA:ByteArray = new ByteArray();
myBA.writeObject(source);
myBA.position = 0;
return(myBA.readObject());
}
让函数return类型为“*”是否意味着它可以是任何类型?或者它是 objects/arrays 特有的东西?
这是因为您将原始数组的引用传递给了新剪辑。作为对象的数组不是基元,因此将始终被引用。
如果你想克隆一个数组,保持原样不变,使用这个方法:
var b:Array = a.concat();
b 将是一个新数组。 a可以修改不改b.