2015-01-17 55 views
0
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 

爲什麼會發生這種情況,有什麼辦法可以避免它?爲什麼(myMC.myArray = myOtherMC.myOtherArray;)會對myMC.myArray進行任何更改以更改myOtherMC.myOtherArray?

編輯:

研究發現,可以克隆關聯數組here的功能。

下面是函數(從上面的鏈接):

function clone(source:Object):* 
{ 
    var myBA:ByteArray = new ByteArray(); 
    myBA.writeObject(source); 
    myBA.position = 0; 
    return(myBA.readObject()); 
} 

是否使函數返回類型「*」的意思,它可以是任何類型的?或者它是特定於對象/數組的東西?

回答

0

這是因爲您已將原始數組的引用傳遞給新剪輯。數組作爲對象不是原語,因此將始終被引用。

如果你想克隆一個數組,保持原有的完好無損,使用此方法:

var b:Array = a.concat(); 

B將被一個新的數組。一個可以修改而不改變b。

+0

如果它是一個關聯數組呢? –

+0

@JaxBantam [**關聯數組**](http://help.adobe.com/en_US/as3/dev/WS5b3ccc516d4fbf351e63e3d118a9b90204-7eea.html)是一個包含命名元素的數組(鍵:「a」,「 foo「,」score「,...)而不是編號元素(索引:0,1,2,...)。 – akmozo

+0

對象實例可以用作關聯數組,通常最好將每個屬性手動複製到新對象。 – ozmachine

相關問題