複製陣列
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());
}
|
|
|