2009/11/23 | 深度复制对象
类别(as3学习札记) | 评论(0) | 阅读(53) | 发表于 20:38
深度复制对象
近来在进行仿真电路设计的学习,经常跟踪数组变动情况,为了比较方便,需要对原数组进行备份。网搜发现:AS3中通过ByteArray进行对象的深度拷贝,具体如下:
函数:
       function cloneObject(_arg:Object):* {
              var type_Name:String = getQualifiedClassName(_arg);//返回_arg对象的完全限定类名(获取_arg全名)
              //trace("输出类的结构:"+type_Name);
              var packageName:String = type_Name.split("::")[0];//切出包名
              // trace("包的名称:"+packageName);
             var type:Class = getDefinitionByName(type_Name) as Class;// (获取Class名)
             //trace("类的名称:"+type);
              registerClassAlias(packageName,type);// (注册Class)
              //复制对象
              var copier:ByteArray = new ByteArray();//创建一个表示填充的字节数组的 ByteArray 实例
              copier.writeObject(_arg);//将_arg对象以 AMF 序列化格式写入字节数组。
              copier.position = 0;//将文件指针的当前位置(以字节为单位)移动或返回到 ByteArray 对象中
              return copier.readObject();//从字节数组中读取一个以 AMF 序列化格式进行编码的对象。
     }
 
示例:
        var myObj={name:"dfblb",mail:"dfblb@qq.com",age:"42"};
        var myCloneObj:Object =cloneObject(myObj);
        myCloneObj.age =41;
       //dfblb   dfblb@qq.com   41
       //trace(myCloneObj.name+"   "+myCloneObj.mail+"   "+myCloneObj.age);
       //dfblb   dfblb@qq.com   42
       //trace(myObj.name+"   "+myObj.mail+"   "+myObj.age);
       
0

评论Comments