Clonazione di array
Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive
La classe Array non presenta un metodo integrato per eseguire copie degli array. Potete creare una
copia
superficiale
(shallow copy) di un array chiamando il metodo
concat()
o
slice()
senza argomenti. In una copia superficiale (shallow copy), se l'array originale presenta elementi che sono oggetti, solo i riferimenti agli oggetti vengono copiati e non gli oggetti stessi. La copia punta agli stessi oggetti dell'originale. Eventuali modifiche apportate agli oggetti vengono riprodotte in entrambi gli array.
In una
copia profonda
(deep copy), tutti gli oggetti rilevati nell'array originale vengono copiati in modo che il nuovo array non punti agli stessi oggetti dell'array originale. Per eseguire copie profonde è necessaria più di una singola riga di codice, che in genere richiede la creazione di una funzione. Tale funzione può essere creata come una funzione di utilità generale o come un metodo di una sottoclasse di Array.
Nell'esempio seguente viene definita una funzione denominata
clone()
che esegue una copia profonda. L'algoritmo viene preso a prestito da una tecnica di programmazione Java comune. La funzione crea una copia profonda serializzando l'array in un'istanza della classe ByteArray, quindi rileggendo l'array in un nuovo array. Tale funzione accetta un oggetto in modo che possa essere utilizzato sia con array indicizzati che associativi, come illustrato dal codice seguente:
import flash.utils.ByteArray;
function clone(source:Object):*
{
var myBA:ByteArray = new ByteArray();
myBA.writeObject(source);
myBA.position = 0;
return(myBA.readObject());
}
|
|
|