深度复制对象
近来在进行仿真电路设计的学习,经常跟踪数组变动情况,为了比较方便,需要对原数组进行备份。网搜发现: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);