2009-05-07 10 views
4

Ceci est probablement une question très simple, je n'ai tout simplement pas le plus brumeux comment s'y prendre.La duplication instantanée d'une bibliothèque Object-Cloning?

J'ai un objet que je veux dupliquer et je ne sais pas comment procéder. Voici ma tentative:

var myObj = new ObjectClass(); 
var duplicate = myObj; 
duplicate = null; 
myObj.function(); // Error: Null reference 

Le ObjectClass est très grand, et crée inherets les enfants de son propre, et je suis sûr qu'il ya probablement quelques classes singleton là-dedans.

Existe-t-il un moyen de dupliquer quelque chose facilement?

Editer: On dirait que je suis à la recherche de "clonage", pour lequel il n'y a pas de fonction AS3, et vous ne pouvez apparemment pas cloner des données privées de toute façon. Quelqu'un sait-il d'une bibliothèque ou une solution de contournement pour cloner un tas de données privées?

Répondre

4

J'ai obtenu cette fonction util de certains blog, je ne me souviens pas d'où je ne peux pas donner le crédit. Cependant, cela ne fonctionnerait pas avec bitmapdata. il est en tout cas ici:

public static function copy(o:Object):Object 
{ 
    var bytes:ByteArray = new ByteArray(); 
    bytes.writeObject(o); 
    bytes.position = 0; 
    return bytes.readObject(); 
} 

Utilisation:
registerClassAlias ​​("com.tests.TestClass", TestClass); var testCopy: TestClass = TestClass (ObjectUtil.copy (test));

+1

Ah oui, cela semble faire l'affaire. Merci beaucoup!! Semble être de ce blog: http://www.darronschall.com/weblog/2007/08/on-transient-objectutilcopy-and-casting.cfm –

+0

Comme indiqué ci-dessous qui fonctionne pour copier les propriétés publiques mais ne travailler avec des propriétés privées. –

+1

Le code ci-dessus est l'implémentation réelle de la méthode ObjectUtil.copy() de Flex, donc si vous travaillez dans Flex, vous pouvez utiliser directement la classe ObjectUtil au lieu d'utiliser le code ci-dessus. – Stiggler

1

Vous pouvez utiliser ObjectUtil.copy() (une bibliothèque Flex). Mais vous avez raison de dire qu'il ne supporte pas les données privées. Donc, c'est une photo dans le noir, mais je me demande si vous le série en AMF en utilisant ByteArray.writeObject() si cela va copier les données privées? Cela pourrait valoir la peine d'essayer.

+0

Je viens d'essayer l'approche ByteArray et cela ne semble pas fonctionner. Pardon. –