AS3 对象 深度复制

来源:互联网 发布:试客联盟 淘宝查不查 编辑:程序博客网 时间:2024/04/29 21:18
AS3 对象 深度复制
package cn.lite3.utils{ import flash.net.getClassByAlias; import flash.net.registerClassAlias; import flash.utils.ByteArray; import flash.utils.getQualifiedClassName;    public class ObjectUtil {    // 对象深度复制  将实例及子实例的所有成员(属性和方法, 静态的// 除外)都复制一遍, (引用要重新分配空间!)     // 局限性    // 1. 不能对显示对象进行复制    // 2. obj必须有默认构造函数(参数个数为0,或都有默认值)        // 3. obj 里有obj类型 之外 的非内置数据类型时, 返回类型将不//确定              //  @param  obj  strong      strong 深复制的对象 //   @return     static public function deepClone(obj)  {   var aliasClass:Class;   var classDefinition:Class = Object(obj).constructor as Class;   var className:String = getQualifiedClassName(obj);   // 获取已注册 obj的类名的类型   try {    aliasClass = getClassByAlias(className);   }catch (errError) { }   // 没有注册 AliasName   if (!aliasClass)   {    registerClassAlias(className, classDefinition);   }  // 已经注册了 AliasName ,且不是它的全类名,要重新注册个   else if (aliasClass != classDefinition)   {    registerClassAlias(className + “”+ className, classDefinition);   }   else{   // 注册的AliasName 为 全类名   var byteArray:ByteArray = new ByteArray();   byteArray.writeObject(obj);   byteArray.position = 0;   return byteArray.readObject();  } }}