Arrays klonen

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

De klasse Array heeft geen ingebouwde methode voor het kopiëren van arrays. U kunt een oppervlakkige kopie van een array maken door de methode concat() of slice() aan te roepen zonder argumenten. Bij een oppervlakkige kopie geldt dat als de originele array elementen heeft die objecten zijn, alleen de verwijzingen naar de objecten worden gekopieerd in plaats van de objecten zelf. De kopie verwijst naar dezelfde objecten als het origineel. Wanneer de objecten worden gewijzigd, worden deze wijzigingen door beide arrays overgenomen.

Bij een diepe kopie worden alle objecten die in de originele array worden aangetroffen ook gekopieerd. De nieuwe array verwijst dus niet naar dezelfde objecten als de originele array. Diep kopiëren vergt meer dan één regel code. Meestal moet een functie worden gemaakt. Zo’n functie kan worden gemaakt als algemene hulpprogrammafunctie of als methode van een subklasse Array.

In het volgende voorbeeld wordt een functie met de naam clone() gedefinieerd voor een diepe kopie. Het algoritme wordt geleend uit een algemene Java-programmeertechniek. De functie maakt een diepe kopie door de array met serienummering te coderen in een instantie van de klasse ByteArray en de array vervolgens opnieuw in te lezen in een nieuwe array. Deze functie accepteert een object, zodat het kan worden gebruikt met zowel geïndexeerde als associatieve arrays, zoals in de volgende code wordt getoond:

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