ActionScript 3中如何深拷贝(deep copy)一个对象

记得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,直接使用即可。


[本日志由 Admin 于 2008-09-16 01:24 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags:
评论: 0 | 引用: 0 | 查看次数: 2843
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
字数限制 1000 字 | UBB代码 开启 | [img]标签 关闭