烈火网教程 关于flash
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
分享到:
相关推荐
3. **文献综述**:对相关研究进行系统性的回顾和分析,展示你对主题的理解深度,以及你的研究如何补充或改进现有的研究成果。在IT领域,这可能涵盖最新的技术论文、专利或行业报告。 4. **研究目标与假设**:明确...
在“QR_Research.rar”这个压缩包文件中,我们很可能是找到了关于二维码生成和扫描的研究资料或工具。 首先,二维码生成是将特定的信息转化为二维码图像的过程。生成二维码通常涉及以下几个步骤: 1. **数据编码**...
3. **交通出行**:公共交通系统中的二维码可用于购票或验证票务,简化流程。 4. **信息交换**:个人名片、Wi-Fi密码等信息可以通过二维码快速分享,减少手动输入的繁琐。 5. **物联网**:物联网设备的配置和管理中...
Operations Research Applications and Algorithms 4E
在本课程“研究方法与设计”中,我们将深入探讨如何有效地进行科学研究,特别是在学术领域。这一主题涵盖了研究的几个核心方面,旨在帮助你理解和掌握研究的精髓,以便在未来的研究项目中取得卓越成果。 首先,我们...
第3章 研究、理论与范式 第2篇 研究的建构:定量与定性 第4章 研究项目的目的与研究设计 第5章 抽样逻辑 第6章 从概念到测量 第7章 指标、量表和分类法 第3篇 观察的方式 第8章 问卷调查 第9章 实验方法 第10章 非...
3. **用户体验**:由于“QR_Research”是直接使用的,这意味着它可能具有直观的用户界面,减少了安装和配置的过程,提高了使用效率。此外,不依赖浏览器环境意味着用户不必担心浏览器兼容性问题或插件冲突。 4. **...
解决这个问题的一种方法是将依赖于`o`对象的代码移到`INITIALIZE`或更晚的事件处理函数中,例如`onInit()`,因为此时组件的属性已经被初始化。例如: ```actionscript private function onInit(event:FlexEvent):...
【研究方法简介】是针对学术研究的一门课程,旨在引导学生理解和掌握研究过程中的关键概念,为撰写研究提案提供指导。课程目标主要包括五个方面: 1. 理解研究提案的核心概念及其相互间的互补关系,形成连贯的研究...
在这个“spring3 research”主题中,我们将深入探讨Spring3的核心特性、优势以及如何在实际项目中有效利用它。 一、Spring3概述 Spring3是Spring框架的重要里程碑,它在前两个版本的基础上做了大量的改进和优化。这...
FOOD RESEARCH INTERNATIONAL投稿格式Food Research International provides a forum for the rapid dissemination of significant nov
the free DevC++ environment from Bloodshed or alternatively languages such as PureBasic and Blitz Research's own next generation BASIC compiler BlitzMax. Extensive documentation based on the ...
实现二维码扫描的功能,对于在电脑上无法直接扫描二维码而设计的软件,直接在QR_Research工具中打开二维码图片,即可实现对二维码内容的解析。同时,QR_Research也支持二维码的简单美化,如添加二维码内置头像等
《Games User Research: A Case Study Approach》这本书由Miguel Angel Garcia-Ruiz编辑,为游戏开发者提供了一系列不同的玩家调研方法,并且包含了一系列案例分析。虽然书中的部分内容未能提供完整的文字描述,但从...
根据提供的文件信息,我们可以推断出这是一本关于商务研究方法的教材——《Business Research Methods》第11版。本书由Donald R. Cooper 和 Pamela S. Schindler编写,并由McGraw-Hill/Irwin出版社出版。接下来,...
Sean McSharry has been a Flash Developer and Designer since 1999 (Flash 3). He runs the popular Flashcoder blog (www.flashcoder.net/blog). He has consulted in many business sectors from Oil ...
3. **动态链接**(Dynamic Linking):栈帧中存储了指向常量池的指针,以便在执行方法调用或字段访问时快速查找对应的信息。 4. **方法返回地址**(Return Address):当方法执行完毕后,JVM需要知道返回到哪个位置...
3. 整数规划:在实际问题中,变量往往需要取整数值,整数规划则是在线性规划的基础上考虑了这一限制。书中会探讨割平面法、分支定界法等求解整数规划问题的方法。 4. 网络流问题:如最大流、最小割问题,它们在物流...