複製陣列

Flash Player 9 以及更新的版本,Adobe AIR 1.0 以及更新的版本

Array 類別沒有內建的方法可製作陣列副本。您可以呼叫 concat()slice() 方法且不搭配引數,建立陣列的「表層副本」。在表層副本中,如果原始陣列具有物件元素,那麼只會複製物件參考,而不會複製物件本身。副本和原始陣列都會指向相同的物件。對物件所做的任何變更,都會反應在這兩個陣列中。

在「深層副本」中,任何在原始陣列中找到的物件也會同時加以複製,因此新的陣列和原始陣列並不會指向相同的物件。深層複製需要一行以上的程式碼,這通常需要建立函數。這種函數可以建立為全域公用程式函數,或是 Array 子類別的方法。

下列範例會定義名為 clone() 的函數,以執行深層複製。此演算法是借自一般的 Java 程式設計技術。此函數會將陣列序列化至 ByteArray 類別的實體中以建立深層副本,然後將陣列讀回新的陣列中。此函數會採用物件,這樣就能與索引陣列和關聯陣列搭配使用,如下列程式碼所示:

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