Klonowanie tablic

Flash Player 9 i nowsze wersje, Adobe AIR 1.0 i nowsze wersje

Klasa Array nie dysponuje wbudowaną metodą wykonywania kopii tablic. Możliwe jest jednak utworzenie płytkiej kopii tablicy przez wywołanie albo metody concat() albo slice() bez argumentów. W kopii płytkiej, jeśli tablica oryginalna zawiera elementy będące obiektami, kopiowane są wyłącznie odwołania do tych obiektów, nie zaś same obiekty. Kopia wskazuje na te same obiekty, co oryginał. Wszelkie zmiany dokonane względem obiektów są odzwierciedlane w obu tablicach.

Kopia głęboka charakteryzuje się tym, że wszelkie znalezione w tablicy oryginalnej obiekty są również kopiowane. W ten sposób nowa tablica nie wskazuje na te same obiekty co tablica oryginalna. Kopiowanie głębokie wymaga więcej niż jednego wiersza kodu, co zwykle prowadzi do utworzenia funkcji. Funkcję taką można utworzyć jako globalną funkcję narzędziową lub w postaci metody podklasy Array.

W poniższym przykładzie zdefiniowano funkcję o nazwie clone() , która realizuje głębokie kopiowanie. Algorytm zapożyczono z powszechnie znanych technik programowania w języku Java. Funkcja ta umożliwia tworzenie głębokiej kopii przez serializację tablicy do instancji klasy ByteArray, a następnie odczytanie tablicy z powrotem do nowej tablicy. Funkcja ta przyjmuje obiekt, zatem może zostać zastosowana zarówno wobec tablic indeksowanych jak i asocjacyjnych, zgodnie z poniższym kodem przykładowym:

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