Clonación de conjuntos

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

La clase Array no tiene ningún método incorporado para hacer copias de conjuntos. Se puede crear una copia superficial de un conjunto llamando a los métodos concat() o slice() sin argumentos. En una copia superficial, si el conjunto original tiene elementos que son objetos, solo se copian las referencias a los objetos, en lugar de los mismos objetos. La copia señala a los mismos objetos que el conjunto original. Los cambios realizados en los objetos se reflejan en ambos conjuntos.

En una copia completa también se copian los objetos del conjunto original, de forma que el nuevo conjunto no señale a los mismos objetos que el conjunto original. La copia completa requiere más de una línea de código, que normalmente ordenan la creación de una función. Dicha función se puede crear como una función de utilidad global o como un método de una subclase Array.

En el ejemplo siguiente se define una función denominada clone() que realiza una copia completa. Se utiliza un algoritmo de una técnica de programación común en Java. La función crea una copia completa serializando el conjunto en una instancia de la clase ByteArray y leyendo a continuación el conjunto en un nuevo conjunto. Esta función acepta un objeto de forma que se pueda utilizar tanto con conjuntos indexados como con conjuntos asociativos, como se indica en el código siguiente:

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