Klonen von Arrays

Flash Player 9 und höher, Adobe AIR 1.0 und höher

Die Array-Klasse verfügt über keine integrierte Methode zum Erstellen von Kopien von Arrays. Sie können eine oberflächliche Kopie eines Arrays erstellen, indem Sie entweder die concat() -Methode oder die slice() -Methode ohne Argumente aufrufen. Wenn das ursprüngliche Array über Objekte als Elemente verfügt, werden bei einer oberflächlichen Kopie nur die Verweise auf die Objekte und nicht die Objekte selbst kopiert. Die Kopie verweist auf die gleichen Objekte wie das ursprüngliche Array. Alle an den Objekten vorgenommenen Änderungen spiegeln sich in beiden Arrays wider.

Bei einer tiefen Kopie werden alle im ursprünglichen Array gefundenen Objekte ebenfalls kopiert, sodass das neue Array nicht auf die gleichen Objekte wie das ursprüngliche Array verweist. Bei einer tiefen Kopie müssen mehrere Codezeilen angegeben werden. Dies spricht in der Regel für die Erstellung einer Funktion. Diese Funktion kann als globale Dienstprogrammfunktion oder als Methode einer Array-Unterklasse erstellt werden.

Im folgenden Beispiel wird die clone() -Funktion definiert, mit der tiefe Kopien erstellt werden. Der Algorithmus stammt aus einer häufig verwendeten Java-Programmiertechnik. Mit dieser Funktion wird eine tiefe Kopie erstellt, indem das Array in eine Instanz der ByteArray-Klasse serialisiert und das Array dann in ein neues Array geschrieben wird. Dieser Funktion können Objekte übergeben werden, sodass sie sowohl bei indizierten als auch bei assoziativen Arrays eingesetzt werden kann, wie im folgenden Codebeispiel dargestellt:

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