对象克隆可以复制出一个和已存在对象相同的对象,并且两个对象没有关联。ActionScript 3.0中克隆对象使用的是ByteArray类。方法很简单,如下:
private function clone(obj:Object):* {
var copier:ByteArray = new ByteArray();
copier.writeObject(obj);
copier.position = 0;
return copier.readObject();
}
clone方法可以对对象实例进行深度拷贝,这些对象包括系统内置的对象实例、自定义普通对象实例、自定义动态对象实例等等。
但是有值得注意的地方,这个方法可以深度拷贝你的对象,但是它不会一同拷贝类的类型定义。所以,如果查需要拷贝一个自定义类型实例时,拷贝出的对象将不再是自定义类型,而是Object,因此在拷贝自定义类型对象的实例时,不要进行强制类型转换,否则将会得不到想要的结果。
下面是示例程序:
-----------------------------------------------------
/**
* 动态类Person
* 文件:Person.as
*/
package
{
public dynamic class Person
{
public function Person()
{
}
}
}
------------------------------------------------------
/**
* 测试类: TestEx
* 文件: TestEx.as
*/
package {
import flash.display.Sprite;
import flash.utils.ByteArray;
public class TestEx extends Sprite
{
public function TestEx() {
// copy 动态类对象
var personA:Person = new Person();
personA.name = "Flex";
personA.age = 23;
personA.sex = "Male";
var personB:* = clone(personA);
// 1. 上面一句如果用了as进行强制类型转换,personB == null;
// 如果使用var personB:Person = Person(clone(personA)); 则会出现TypeError异常;
personA.name = "Janet";
personA.age = 25;
personA.sex = "Female";
trace("personA=", personA.name, personA.age, personA.sex);
trace("personB=", personB.name, personB.age, personB.sex);
// 2. copy 系统内置普通对象,不需要强制类型转换;
var arr:Array = [1, 2, 3];
var arrCopy:Array = clone(arr);
arr = [3, 2, 1];
trace("arr=", arr);
trace("arrCopy=", arrCopy);
// 3. copy 自定义普通对象,同样不能进行强制类型转换,否则将出现与”1“一样的情况;
var dog:Animal = new Animal();
dog.dogName = "Bobby";
var copyDog:* = clone(dog);
dog.dogName = "Papa";
trace("Dog=", dog.dogName);
trace("copyDog=", copyDog.dogName);
}
private function clone(obj:Object):* {
var copier:ByteArray = new ByteArray();
copier.writeObject(obj);
copier.position = 0;
return copier.readObject();
}
}
}
class Animal {
private var _dogName:String;
public function set dogName(dogName:String):void {
this._dogName = dogName;
}
public function get dogName():String {
return this._dogName;
}
}
------------------------------------------------------
输出:
personA= Janet 25 Female
personB= Flex 23 Male
arr= 3,2,1
arrCopy= 1,2,3
Dog= Papa
copyDog= Bobby
分享到:
相关推荐
此外,ActionScript 3.0还支持多维数组和数组的克隆、扩展以及相关操作。 处理字符串是编程中的基础,ActionScript 3.0提供了丰富的字符串操作方法,包括创建字符串、获取长度、处理字符、比较字符串、获取对象的...
### Actionscript3.0开发人员指南 #### 使用日期和时间 **管理日历日期和时间** ActionScript 3.0 提供了强大的日期和时间管理功能。通过 `Date` 类可以轻松地创建、操作和格式化日期。例如,可以通过构造函数...
ActionScript3.0是一种面向对象的编程语言,它极大地增强了Flash的功能,特别是在控制影片剪辑方面。在这个教程中,我们将深入理解如何利用ActionScript3.0来控制和操作影片剪辑。 首先,影片剪辑在Flash中是动画的...
《ActionScript 3.0 Cookbook》是一本针对Adobe Flash平台上的ActionScript 3.0编程的详尽指南,旨在帮助开发者解决日常开发中遇到的各种问题。本书覆盖了从基础概念到高级技巧的广泛主题,包括但不限于创建和管理...
在本书中,读者将深入学习ActionScript 3.0的基础语法,包括变量声明、数据类型、控制结构(如条件语句和循环)、函数定义和调用,以及面向对象编程概念,如类、对象实例化和继承。此外,书中还涵盖了事件处理、错误...
### ActionScript 3.0 开发人员指南精要解析 #### 第 1 章: 使用日期和时间 **管理日历日期和时间** ActionScript 3.0 提供了强大的日期和时间处理功能,主要通过`Date`类实现。这个类支持多种日期和时间格式的...
- **定义**:ActionScript 3.0(AS3)是一种面向对象的编程语言,专为Adobe Flash Player 和 Adobe AIR 设计。它被广泛用于创建交互式多媒体内容、桌面应用和移动应用。 - **发展历程**:AS3是ActionScript的第三个...
### ActionScript 3.0 开发人员指南知识点总结 #### 一、使用日期和时间 - **管理日历日期和时间**:ActionScript 3.0 提供了强大的日期和时间处理功能,通过 `Date` 类可以轻松地管理日期和时间。例如,可以使用 ...
### 编程ActionScript 3.0 #### 关于本手册 本手册旨在为开发者提供一个全面深入地学习ActionScript 3.0的资源。它不仅涵盖了基础概念,还涉及了高级主题,使读者能够充分利用这门语言进行高效编程。 #### 使用本...
ActionScript 3.0 是Adobe开发的一种面向对象的编程语言,主要用于创建富互联网应用程序(RIA),尤其是Flash平台上的游戏和交互式内容。本资源“源文件_ActionScript.3.0.游戏编程大学.rar”提供了深入学习...
### ActionScript3.0开发人员指南关键知识点综述 #### 第1章 使用日期和时间 在ActionScript3.0中,处理日期和时间是至关重要的技能。本章深入介绍了如何管理日历日期和时间,包括如何控制时间间隔,以及一个实际...
### ActionScript 3.0开发技术大全 #### 一、ActionScript 3.0简介 ActionScript 3.0(简称AS3)是Adobe Flash Player 和 Adobe AIR 中使用的强大脚本语言,它允许开发者创建高性能的动画、应用程序和其他交互式...
至于对象的运动,ActionScript 3.0引入了强类型系统和面向对象的编程概念,使得开发者可以精确地控制物体的移动路径、旋转、缩放等行为。 教程中可能涉及的关键知识点包括: 1. **基本语法与数据类型**:了解AS3.0...
在几何结构的处理上,ActionScript 3.0提供了对基本几何形状的操作能力,比如使用Point对象表示坐标点、使用Rectangle对象表示矩形区域、使用Matrix对象进行图形变换等。 绘图API允许开发人员直接在显示对象上绘制...
在ActionScript 3.0中,绘图主要依赖于DisplayObject类的Graphics对象。Graphics对象提供了一系列方法,如beginFill()、lineTo()、drawRect()等,用于在舞台上绘制图形。例如,beginFill()用于设置填充颜色,lineTo...