2011-04-27 9 views

Respuesta

10

El mejor método para hacer esto es usar ByteArray con el método writeObject. De esta manera:

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

Más información sobre esto, aquí: http://www.kirupa.com/forum/showpost.php?p=1897368&postcount;=77

+1

No estoy seguro de si ese clon profundo algo. Recuerdo haber probado algo así hace siglos. Funciona, pero si tiene algo así como un Vector de objetos, entonces terminará con un nuevo Vector con los mismos objetos en el clon – divillysausages

+0

Si puede mostrarme cómo esto no funciona u otra solución que funcione mejor, entonces es muy bienvenido :) – rzetterberg

+2

Ok, acabo de probarlo aquí y funciona, ignora mi comentario anterior. Sin embargo, deberás usar 'registerClassAlias ​​()' en tu clase si deseas conservar la seguridad del tipo. Tanto en la clase misma como en cualquier clase dentro de ella. P.ej. si tienes una clase 'TestClass' que contiene un' Vector' de 'Sprites', necesitarás llamar a' registerClassAlias ​​() 'en' TestClass' y 'Sprite'; de lo contrario, devolverás' Objeto' con 'Vector' de' Objetos' que tienen todas las propiedades de 'Sprites' – divillysausages

0

Si está intentando a lo profundo del clon de un objeto de visualización, esta es la única manera que trabajó para mí:

 public static function clone(target:DisplayObject):DisplayObject  { 
       var bitmapClone:Bitmap = null;   
       var bitmapData:BitmapData = new BitmapData(target.width,target.height,true,0x00000000); 
       bitmapData.draw(target);  
       bitmapClone = new Bitmap(bitmapData); 
       bitmapClone.smoothing = true;   
       return bitmapClone; 
} 

Tenga en cuenta que esto solo copiará visualmente el objeto. No copiará métodos o propiedades. Lo usé cuando cargué imágenes externas y las utilicé en varios lugares.