AS3深复制
2012-07-02 17:52 WesleyWoo 阅读(327) 评论(0) 编辑 收藏 举报类似于如下一段代码,相信已为多数人所用:
public class Sample { private var _param:Object = null; public function Sample(param:Object) { _param = param; } public function copy():Sample { registerClassAlias('sample', Sample); var byte:ByteArray = new ByteArray(); byte.writeObject(this); byte.position = 0; return byte.readObject(); } }
public class Main extends Sprite { public function Main():void { if (stage) init(); else addEventListener(Event.ADDED_TO_STAGE, init); } private function init(e:Event = null):void { removeEventListener(Event.ADDED_TO_STAGE, init); // entry point var param:Object = new Object(); var e1:Sample = new Sample(param); var e2:Sample = e1.copy(); } }
然而,编译却编不过, 在 return byte.readObject(); 的时候,报了参数不对的错误:
ArgumentError: Error #1063: Sample() 的参数数量不匹配。应该有 1 个,当前为 0 个。
鉴于此,发现一个纠结的事实:所有带构造参数的对象都无法深复制。
解决:如一定要深复制,可深复制其参数,再new一个对象出来