Klona arrayer

Flash Player 9 och senare, Adobe AIR 1.0 och senare

I klassen Array finns det inga inbyggda metoder för att skapa kopior av en array. Du kan skapa en ytligkopiering av en array genom att anropa någon av metoderna concat() eller slice() utan argument. Om den ursprungliga arrayen har ett objekt i en ytlig kopiering, kopieras endast referenserna till objektet och inte själva objektet. Kopian pekar på samma objekt som den ursprungliga gör. Alla ändringar som görs på objektet återspeglas i båda arrayerna.

Vid en djup kopiering kopieras även alla objekt som hittas i den ursprungliga arrayen så att den nya arrayen inte pekar på samma objekt som den ursprungliga. För djup kopiering krävs mer än en kodrad där du vanligtvis gör ett anrop för att skapa en funktion. En sådan funktion kan skapas som ett globalt verktyg eller som en metod i en Array-underklass.

I följande exempel definieras en funktion med namnet clone(), som används för att göra djupkopieringen. Algoritmen lånas från en vanlig teknik som används vid Java-programmering. I funktionen skapas en djup kopia genom att serialisera arrayen i instanser av klassen ByteArray och sedan läsa tillbaka arrayen till en ny array. Funktionen accepterar ett objekt så att den kan användas både för indexerade arrayer och associativa arrayer, vilket framgår av följande exempel:

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