代码改变世界

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一个对象出来