- 浏览: 135222 次
- 性别:
- 来自: 苏州
-
最新评论
-
lanliying:
主窗体报错Multiple markers at this l ...
Flex自定义事件 -
Alex丿:
12年的帖子,难得~。~
Flex编译参数设置
复制复杂对象(例如ArrayCollection,XML)时,可以使用ObjectUtil.copy()方法,代码如下:
//Object对象:
var obj1:Object = {name:"name01",data:"data01"}; var obj2:Object = ObjectUtil.copy(obj1); obj2.name = "name02"; obj2.data = "data02"; ArrayCollection: var ac2:ArrayCollection = ObjectUtil.copy(ac) as ArrayCollection;
//XML:
var myXML2:XML = ObjectUtil.copy(myXML1) as XML;
因为copy方法返回的结果是Object类型,如果对于自定义的对象,copy方法返回结果类型就会丢失,变成Object,而且无法转换成自定义的对象,我们需要对ObjectUtil.copy()方法进行修改,让他支持自定义的类型。
源码如下:
public static function copy(value:Object):Object { var buffer:ByteArray = new ByteArray(); buffer.writeObject(value); buffer.position = 0; var result:Object = buffer.readObject(); return result; }
所做修改如下:
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
发表评论
-
清除flash player缓存-SharedObject
2012-06-18 14:02 2198http://www.macromedia.com/suppo ... -
Flash Builder4.6破解
2012-06-10 13:41 5具体步骤如下:1.到Adobe官网下载FlashBuilder ... -
SharedObject
2012-04-11 16:05 1633共享对象可以简单理解为类似浏览器的cookies,可以将一定 ... -
RollOver和MouseOver的区别
2012-03-20 10:22 1725共同点:都是针对鼠标的进入和进出事件。 不同点: 1、 ... -
wmode参数详解,对flash以及html元素的影响(转载)
2012-03-08 14:16 3652在页面中经常会用到需 ... -
Flex自定义事件时为什么要重载clone()方法(转载)
2012-02-19 17:35 1424声明:转载 以前在学习自定义事件的时候一直不太明白为什 ... -
Datagrid动态添加列
2012-02-19 17:34 1930Datagrid的列是一个数组,动态添加列的方法是创建一个新的 ... -
一个简单的画板
2012-02-17 11:22 1438Flex中画图,有两种方法: 1、直接在canvas中画 ... -
给特效加上缓动效果
2012-02-17 11:21 1031给特效的结束前加上缓动效果,比如模拟篮球落地->弹起-& ... -
BitmapData
2012-02-17 11:21 1888可以使用BitmapData对象加载图片,BitmapData ... -
TitleWindow自定义标题栏
2012-02-17 11:21 1647应用场景: TitleWindow宽度固定,titl ... -
Image拉伸
2012-02-17 11:21 1365应用场景: 当使用Image加载图片或swf文件时, ... -
TextArea设置文本的局部样式
2012-02-16 13:21 3454var tr:TextRange = new TextR ... -
HtmlText中加入超链接
2012-02-16 13:20 1270以下是Label中加入超链接的例子: prote ... -
Flex滤镜
2012-02-16 13:20 1803使用滤镜可以改变文本和控件显示效果,Flex滤镜如下: ... -
Flex字体
2012-02-16 13:20 17751、嵌入字体 嵌入字体会把字体文件编译到应用中,所以 ... -
Flex的Combobox组件
2012-02-16 13:19 85771、显示提示 设置Prompt ... -
Flex中ToolTip的使用
2012-02-15 10:12 27121、为ToolTip加入动画效 ... -
Flex常用特效
2012-02-15 10:12 1064Flex常用特效列表: -
Flex回调函数
2012-02-15 10:12 1232应用场景:父子窗体之间的通信,比如想把弹出窗口中的数据传给弹出 ...
评论