收藏本站 | 广告设计 | 设计素材 | 教程 | ppt素材 | 中职 | 范文 | 常识 | 学习方法 | 作文  
订阅
首页
高考试题中考试卷学习方法范文写作作文大全公务员考试英语考试中职教育生活常识评语大全
热门: 广告设计 设计素材 教程 ppt素材 自考试卷 计算机等级考试 财会类考试 建筑工程考试 医药类考试 考研 电脑学习 驾照考试 语录名言好词 周公解梦 偏方
当前位置:一路求学网文章频道平面设计教程Flash教程as3中通过ByteArray进行对象的深度拷贝

as3中通过ByteArray进行对象的深度拷贝

一路求学网 http://www.16qiuxue.com  阅览次数: 655次 08-24 17:03:10 

标签:flash教程制作,flash动画教程,flash教程下载,http://www.16qiuxue.com as3中通过ByteArray进行对象的深度拷贝,

Webjx核心提示:as3中通过ByteArray可以进行对象的深度拷贝.

今天同事问我有as3中对象深度拷贝的问题

原来还真是没用过,今天google后自己总结下,便于大家参考

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

,as3中通过ByteArray进行对象的深度拷贝
《as3中通过ByteArray进行对象的深度拷贝》相关文章

网友评论>>

联系我们 | 网站地图 | 广告设计 | 设计素材 | 教程大全 | ppt素材 | 中职教育 | 范文大全 | 常识大全 | 学习方法 | 作文大全
一路求学网 版权所有. Copyright © - http://www.16qiuxue.com. All rights reserved.
学习方法_小学英语作文_驾照考试试题_幼儿园大班评语
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18