这是一篇关于as3中对象深度拷贝的问题
今天自己总结下,便于大家参考
as3中通过ByteArray可以进行对象的深度拷贝
import flash.utils.ByteArray;
import flash.utils.getQualifiedClassName;
import flash.net.*;
import src.*;
function cloneObject(source:Object) :* {
var typeName:String = getQualifiedClassName(source);//获取全名
trace(”输出类的结构”+typeName);
//return;
var packageName:String = typeName.split(”::”)[0];//切出包名
trace(”类的名称”+packageName);
var type:Class = getDefinitionByName(typeName) as Class;//获取Class
trace(type);
registerClassAlias(packageName, type);//注册Class
//复制对象
var copier:ByteArray = new ByteArray();
copier.writeObject(source);
copier.position = 0;
return copier.readObject();
}
有的人说用复制对象那一段不就可以了吗,但是实际上行不通
对于数组深度复制来说, 复制对象的后面4句代码就足够了
var a1:Array=[1,2,3];
var a2:Array =cloneObject(a1);
var a3:Array = a1;
a1.push(”youmila”);
trace(”a1:”+a1+”a2:”+a2+”a3″+a3);
但是对于对象来说肯定不行
用列子测试下
src.youmila.as 代码:
package src{
public class youmila{
private var $_name:String =”youmila”;
private var $_num:Number =0;
public function youmila():void{
trace($_name);
}
public function secondFunc():void{
$_num++;
trace(”this a called function $_num::”+$_num);
}
}
}
yapollo.as 代码:
package {
public class yapollo{
private var $_name:String =”yapollo”;
public var $_num:Number =0;
public function yapollo():void{
trace($_name);
}
public function secondFunc():void{
$_num++;
trace(”this a called function $_num::”+$_num);
}
}
}
测试实例
var uml1:youmila = new youmila();
var uml2 = cloneObject(uml1);
trace(”类型”+getQualifiedClassName(uml2));
输出结果:
youmila
类型Object
原来的对象类型丢失了,所以对于对象而言,四行不够,必须
用registerClassAlias来保存类的别名,以用于丢失后恢复类的类型
测试实例
var uml1:youmila = new youmila();
var uml2 = cloneObject(uml1);
trace(”类型”+getQualifiedClassName(uml2));
var apollo:yapollo = new yapollo();
apollo.secondFunc();
var apollo2 = cloneObject(apollo);
trace(”第一次输出复制对象的$_num值”+apollo2.$_num);
trace(”类型”+getQualifiedClassName(apollo2));
apollo2.secondFunc();
trace(”第二次输出复制对象的$_num值”+apollo2.$_num);
输出结果:
youmila
输出类的结构src::youmila
类的名称src
[class youmila]
youmila
类型src::youmila
yapollo
this a called function $_num::1
输出类的结构yapollo
类的名称yapollo
[class yapollo]
yapollo
第一次输出复制对象的$_num值1
类型yapollo
this a called function $_num::2
第二次输出复制对象的$_num值2
package {
import flash.utils.ByteArray;
import flash.utils.getQualifiedClassName;
import flash.utils.getDefinitionByName;
import flash.net.registerClassAlias;
public class CopyUtil{
public static function clone(object:Object):Object{
var qClassName:String = getQualifiedClassName(object);
var objectType:Class = getDefinitionByName(qClassName) as Class;
registerClassAlias(qClassName, objectType);
var copier : ByteArray = new ByteArray();
copier.writeObject(object);
copier.position = 0;
return copier.readObject();
}
}
}
var instanceA : ClassA = new ClassA();
var instanceCopy : ClassA = CopyUtil.clone(instanceA ) as ClassA;
trace(instanceCopy == instanceA)//fale;
trace(instanceCopy is ClassA) // true;
trace(instanceCopy is superClass) //true;
thanks:http://flexjs.cn/post/5.html
分享到:
相关推荐
as3.0交换深度的问题.txt
本程序用于将java对象转换为AS对象 Java2As3.fxp 是Java2As3.exe的许可文件 Java2As3.exe 是windows 安装包,如果不用工程跑,可先安装AdobeAIRInstaller,再安装Java2As3.exe。 Java2As3.p12是源代码,使用方式...
简单的点击变换容器深度,初学者所写莫见怪
纯as3代码实现对象缓存,对应频繁需要创建和销毁的对象,采用一个缓存队列,保存一定数量的对象,当需要的时候从队列里取出,不再需要的时候交给缓存池。
Flex教程系列之(四) AS3语法——面对对象编程 http://download.csdn.net/source/1161879 Flex教程系列之(五) AS3语法——静态常量继承和接口 http://download.csdn.net/source/1161921 Flex教程系列之(六) AS3...
AS3_显示对象结构图,高清PDF版。用一张图片形式将所有显示对象的关系罗列出来
本文实例讲述了JavaScript对象拷贝与Object.assign用法。分享给大家供大家参考,具体如下: 深拷贝与浅拷贝 在 JavaScript 中,对于基本数据类型(undefined、null、boolean、number、string)来说,在变量中存储的...
flash as3.0 求解迷宫最短路径 深度优先策略 flash as3.0 求解迷宫最短路径 深度优先策略 flash as3.0 求解迷宫最短路径 深度优先策略 flash as3.0 求解迷宫最短路径 深度优先策略 flash as3.0 求解迷宫最短路径 ...
这些文件中的对象示例包括标头,数据属性和编解码器对象。 您无法使用ASF Viewer编辑文件或文件中的元数据; 它只是一个可用于查看文件结构内容的工具。ASF Viewer具有图形用户界面,但您也可以从命令提示符以批处理...
as3动态修改对象注册点的类库,与相应实例应用
Flash as3调用外部AS脚本 很小的示例
toplevel.as文件.rar flash cs4编译flash cs3或更低版本时需要的文件 放在class下面 解决方法: ... 2、添加新路径,输入C:\Program... 3、然后把Flash CS3的”toplevel.as“文件拷贝到此路径下,现在应该解决了!
as3反射和将XML转换成对象的类 可以反射出属性,方法
addChildAndInit.as ---------------------- 添加显示对象并初始化 ContainerMovieClip.as ------------------ movieClip容器,一般用来存放加载的 DisplayGroup.as ---------------------- 显示对象群组 ...
AS1015芯片资料AS1015芯片资料AS1015芯片资料
磁编码器AS5600 AS5040 设计原理图 两个磁编码器的技术说明pdf及设计原理图,AD9的sch文件,需要ad9打开。
将AS3对象编码到Lua表中。 将Lua表字符串解码为AS3对象。 ### AS3对象的输入和输出示例: var as3Obj = new Object () ;as3Obj [ "name" ] = "foo" ; <---> Lua字符串: return { name = " foo " ,} 限制:不...
一个用as3和面向对象方式和xml开发的模拟楼宇从地拔起效果源码! 既然是面向对象的方式 当然可以自己逐步修改扩展! 任意角度 数量 等等。。自己看吧 还算灵活
本文实例讲述了javascript二维数组和对象的深拷贝与浅拷贝。分享给大家供大家参考,具体如下: 这篇文章主要为大家详细介绍了js实现数组和对象的深浅拷贝, 1.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新...
台达AS系列PLC的编程手册,熟悉AS系列PLC的编程方法。