2011-04-27 92 views

回答

10

执行此操作的最佳方法是将ByteArray与writeObject方法一起使用。就像这样:

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

更多信息,在这里:http://www.kirupa.com/forum/showpost.php?p=1897368&postcount;=77

+1

我不确定是否深层克隆了某物。我记得很久以前测试过这样的东西。它可以工作,但是如果你有类似于Vector对象的东西,那么你最终将得到一个新的Vector,其克隆中包含相同的对象。 – divillysausages 2011-04-27 08:05:52

+0

如果你能告诉我这是行不通的还是另一种更好的解决方案,那么它是多么欢迎:) – rzetterberg 2011-04-27 08:07:49

+2

好吧,我只是在这里测试它,它的工作原理,忽略我以前的评论。如果你想保持类型安全,你需要在你的类上使用'registerClassAlias()'。无论是在课堂上还是课堂上的任何课堂上。例如。如果你有一个'TestClass'类,它包含'Sprites'的'Vector',你需要在'TestClass'和'Sprite'上调用'registerClassAlias()',否则你会返回一个Object具有“精灵”所有属性的“对象”矢量图# – divillysausages 2011-04-27 08:34:52

0

如果你想深克隆的显示对象,这仅仅是它为我工作的方式:

 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; 
} 

请注意,这只会复制视觉对象。它不会复制方法或属性。 我用这个当我加载外部图像,并在多个地方使用它们。