vini123

博客园 首页 新随笔 联系 订阅 管理

今天,在做一个的项目。遇到Vector的深复制,发现复制竟然不成功。(Vector里边存储的复杂数据MovieClip)。今天先记录这里,下次再研究。在想办法解决ing。 下边先进行些简单的测试。然后,用网上的方法测试。先看code:

 

package
{
    import flash.display.MovieClip;
    import flash.display.Sprite;
    import flash.utils.ByteArray;
    
    public class ArrayCopy extends Sprite
    {
        public function ArrayCopy()
        {
            var a:Array = [1 , 2 , 3];
            var b:Array = a;
            a.splice(0);
            trace("1_1  a:"+ a , "b:" + b);
            //输出:1_1  a: b:
            
            b = [];
            a = [1 , 2 , 3];
            b = a;
            b.splice(0);
            trace("1_2  a:"+ a , "b:" + b);
            //输出: 1_2  a: b:
            
            b = [];
            a = [1 , 2 , 3];
            b = a;
            a[0] = 2;
            trace("1_3  a:"+ a , "b:" + b);
            //输出:1_3  a:2,2,3 b:2,2,3

            /*                       
            通过以上的测试,能够知道,数组间的直接赋值,改变了任意一个数组里边的元素,
另外一个也会改变。无论数据是基元数据类型还是复杂数据类型
*/ b = []; a = [1,2,3]; b = a.slice(); a.splice(0); trace("2 a:"+ a , "b:" + b); //输出:2 a: b:1,2,3 b = []; a = [1,2,3]; b = a.concat(); a.splice(0); trace("3 a:"+ a , "b:" + b); //输出:3 a: b:1,2,3 b = []; a = [1,2,3]; for each(var i:int in a) { b.push(i); } a.splice(0); trace("4 a:"+ a , "b:" + b); //输出:4 a: b:1,2,3 /* 通过以上的测试,能够知道,基元数据类型的浅复制,改变了一个数组,另外一个数组不会改变
*/ b = []; a = [ 1 , "vini" , true]; b = a.slice(); a[0] = "gg" ; a[1] = 2; a[2] = false; trace("5 a:"+ a , "b:" + b); //输出:5 a:gg,2,false b:1,vini,true b= []; a = [1 , [1 , 2],3]; b = a.slice(); a[1] = [100,200]; trace("6 a:"+ a , "b:" + b); //输出:6 a:1,100,200,3 b:1,1,2,3 b= []; a = [1 , {a:1,b:2},3]; b = a.slice(); a[1].a = 100; a[1].b = 200; trace("7 a:"+ a[1].a , "b:" + b[1].a); //输出:7 a:100 b:100 /* 通过以上的测试,能够知道,基元数据类型的浅复制,改变了一个数组,
另外一个数组不会改变(如果是Array其内层值也是基元数据类型),
复杂数据类型则会改变
*/ b= []; a = [1 , {a:1,b:2},3]; var byteArray:ByteArray = new ByteArray(); byteArray.writeObject(a); byteArray.position = 0; b = byteArray.readObject(); a[1].a = 100; a[1].b = 200; trace("8 a:"+ a[1].a , "b:" + b[1].a); //输出 8 a:100 b:1 b= []; var mc:MovieClip = new MovieClip(); mc.id = 5; a = [1 , mc , 3]; byteArray = new ByteArray(); byteArray.writeObject(a); byteArray.position = 0; b = byteArray.readObject(); (a[1] as MovieClip).id = 500; trace("9 a:"+ a[1] , "b:" + b[1]); //输出 9 a:[object MovieClip] b:undefined /* 通过以上的测试,能够知道,数据的深复制,像MovieClip这样的复杂数据,
不能深复制成功,object里边如果是基元数据,可以深复制成功
*/

       var roll:Roll = new Roll(); roll.id = 5; b = []; a = [1 , roll , 3]; byteArray = new ByteArray(); byteArray.writeObject(a); byteArray.position = 0; b = byteArray.readObject(); roll.id = 500; trace("10 a:"+ a[1].id , "b:" + b[1].id , "b:" + b[1].mc);
            //输出  10  a:500 b:5 b:undefined
            /*                       
              通过以上的测试,能够知道,普通的类可以深复制,像MovieClip这样的复杂数据,
不能深复制成功。
*/
        }
    }
}    

 

posted on 2014-04-18 12:09  黑夜丶残枫  阅读(728)  评论(0)    收藏  举报