ActionScript 3中如何深拷贝(deep copy)一个对象
作者:Admin 日期:2008-09-12
记得flash帮助文档 Programming ActionScript 3.0 / Core ActionScript 3.0 Data Types and Classes / Working with arrays /Cloning arrays 一节讲了如何深克隆(deep copy)一个数组的方法,以前一直以为这个方法只对数组有用,其实这个方法适用于所有的对象。
下面是我的例子:
程序代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="completeHandler()">
<mx:Script>
<![CDATA[
import mx.controls.Button;
import flash.utils.ByteArray;
public function clone(source:Object):*
{
var myBA:ByteArray = new ByteArray();
myBA.writeObject(source);
myBA.position = 0;
return(myBA.readObject());
}
private var c1:CloneClass;
private var c2:Object;
private function completeHandler():void
{
c1 = new CloneClass();
c1.age = 30;
c1.button = new Button;
c1.button.label = "c1";
c2 = clone(c1);
trace("c1: " + c1.age + " " + c1.button.label); // 输出 c1: 30 c1
trace("c2: " + c2.age + " " + c2.button.label); // 输出 c2: 30 c1
}
private function change():void
{
c1.age = 50;
c1.button.label = "cc1";
trace("after changed --------------------------------");
trace("c1: " + c1.age + " " + c1.button.label); // 输出 c1: 50 cc1
trace("c2: " + c2.age + " " + c2.button.label); // 输出 c2: 30 c1
}
]]>
</mx:Script>
<mx:Button x="106" y="97" label="Change" click="change()"/>
</mx:Application>
CloneClass 类
程序代码
package
{
import mx.controls.Button;
public class CloneClass
{
public var button:Button;
public var age:uint = 1;
public function CloneClass()
{
}
}
}
Flex框架中已经包含了这个方法 mx.utils.ObjectUtil.copy(value:Object):Object,直接使用即可。
下面是我的例子:
程序代码<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute" creationComplete="completeHandler()">
<mx:Script>
<![CDATA[
import mx.controls.Button;
import flash.utils.ByteArray;
public function clone(source:Object):*
{
var myBA:ByteArray = new ByteArray();
myBA.writeObject(source);
myBA.position = 0;
return(myBA.readObject());
}
private var c1:CloneClass;
private var c2:Object;
private function completeHandler():void
{
c1 = new CloneClass();
c1.age = 30;
c1.button = new Button;
c1.button.label = "c1";
c2 = clone(c1);
trace("c1: " + c1.age + " " + c1.button.label); // 输出 c1: 30 c1
trace("c2: " + c2.age + " " + c2.button.label); // 输出 c2: 30 c1
}
private function change():void
{
c1.age = 50;
c1.button.label = "cc1";
trace("after changed --------------------------------");
trace("c1: " + c1.age + " " + c1.button.label); // 输出 c1: 50 cc1
trace("c2: " + c2.age + " " + c2.button.label); // 输出 c2: 30 c1
}
]]>
</mx:Script>
<mx:Button x="106" y="97" label="Change" click="change()"/>
</mx:Application>
CloneClass 类
程序代码package
{
import mx.controls.Button;
public class CloneClass
{
public var button:Button;
public var age:uint = 1;
public function CloneClass()
{
}
}
}
Flex框架中已经包含了这个方法 mx.utils.ObjectUtil.copy(value:Object):Object,直接使用即可。
评论: 0 | 引用: 0 | 查看次数: 2843
发表评论
上一篇
下一篇

文章来自:
Tags: