先来看下面的代码:
var initialObj:Object=new Object();
initialObj.name="名字";
var afterObj:Object=initialObj;
afterObj.name="改名了";
trace("initialObj的名字:"+initialObj.name);//输出“改名了”
trace("afterObj的名字:"+afterObj.name);//输出“改名了”
如果是新手,可能你会紧张的发现initialObj的名字也变成了"改名了",但并没有更改过他的名字啊
首先要知道的是AS3里总的分为两种数据类型——基元数据类型也叫原始数据类型和复杂数据类型也叫引用数据类型,具体是什么可以到网上查下相关资料,
如果网上资料不多,过完年我会回来补上。
因为Object是一个复杂数据类型把initialObj赋值给afterOb(就是这行var
afterObj:Object=initialObj;)其实是把initialObj和afterOb指向内存中的同一地址,所以改变了
afterObj,initialObj也改变了。
如何复制一个和initialObj一模一样的对象,而更改复制的对象又不影响initialObj呢,就要用到下面的复制方法,统称“深复制”
//声明一个Object类型的变量initialObj,并添加一个名为name的属性,属性值为“名字”
var initialObj:Object=new Object();
initialObj.name="名字";
//声明ba并把initialObj写入到ba中,也就是使用二进制数据存储initialObj
var ba:ByteArray=new ByteArray();
ba.writeObject(initialObj);
ba.position=0;
//声明afterObj并从ba读取initialObj,其实读取的是和initialObj长的一模一样的一个对象,并不是
initialObj
var afterObj:Object=ba.readObject();
afterObj.name="改名了";
trace("initialObj的名字:"+initialObj.name);//输出“名字”
trace("afterObj的名字:"+afterObj.name);//输出“改名了”
相关推荐
浅复制只是复制对象的引用,而深复制则是复制对象的所有值。 浅复制 浅复制是 Clone 方法的默认实现,它只是复制对象的引用,而不复制对象的值。例如,下面的代码: ```csharp public class A : ICloneable { ...
"深复制"和"浅复制"是两种不同的复制方式,它们在内存管理和对象引用上有着显著的区别。 首先,让我们理解“浅复制”(Shallow Copy)。浅复制是指创建一个新对象,这个新对象的指针指向的是原始对象中的数据的副本...
AS3支持浅复制和深复制,可以利用clone()方法实现。 6. **适配器模式**:将一个类的接口转换成客户期望的另一个接口。在AS3中,通过类的继承和组合实现,将不兼容的接口转化为可兼容接口。 7. **装饰器模式**:...
AS3支持浅拷贝和深拷贝,可以用于快速复制对象。 6. 组合模式(Composite):将对象组合成树形结构以表示“部分-整体”的层次结构。AS3中的DisplayObject容器类如Sprite和MovieClip就是组合模式的典型应用。 7. 享...
深度复制(Deep Copy)是指创建一个新的对象,不仅复制原始对象的值,还复制其引用类型的属性指向的新对象,确保修改副本不会影响原始对象。本文将详细介绍如何使用反射来实现对象的深度复制。 反射是.NET框架提供...
常见于将原型函数从一个对象复制到另一个对象,但目标对象类型与原始对象类型不符的情况。 - **解决方案**:确保调用的目标对象类型与方法的预期对象类型相匹配,可以参考 ECMAScript 语言规范第三版的第 15 章获取...
2. **类和对象**:为了实现菜单的动态行为,我们需要创建AS3类来表示菜单项和整个菜单。每个菜单项可以是一个Button类的实例,包含文本和图像。类应该包含属性(如标题、链接等)和方法(如点击事件处理)。 3. **...
- **Sprite 类**:Sprite 类是AS3中最常用的显示对象容器之一,它可以包含多个子项,并提供了一系列用于控制这些子项的方法。 #### 3. 网络通信与资源管理 - **Socket 类**:用于实现客户端与服务器之间的网络通信...
这种问题经常出现在将原型函数从一个对象复制到另一个对象,并在目标对象类型与原始对象类型不匹配时调用。 - **解决方法**: - 确保目标对象与原始对象类型一致。 - 参考ECMAScript语言规范第三版第15章以获得更...
文档开篇即明确了ActionScript 3.0(AS3)的版权归属Adobe Systems Incorporated,并对其使用、复制和分发做了严格的限制。随后,文档详细阐述了AS3的使用条款、版权保护、责任声明以及对图形和图像使用的警告,强调...
如果涉及到复杂的对象数组,需考虑深拷贝和浅拷贝的区别。 五、实际应用示例 在实际编程中,数组复制常用于数据备份、数据处理和并发场景。例如,在一个多线程程序中,为了防止并发修改数据引发的问题,可能需要先...
DeepCopier是一个小型库,可以按表达式树深层复制对象。 安装: 安装DeepCopier 。 用法示例: 1.深度复制源对象。 SomeType obj1 = new SomeType (); SomeType obj2 = Copier . Copy ( obj1 ); List < SomeType> ...
JavaScript中的浅复制与深复制是处理复杂数据结构(如对象和数组)时常见的概念,主要涉及到内存管理和数据拷贝的方式。这两种复制方式的区别在于它们如何处理引用数据类型的副本。 首先,JavaScript中有两种数据...
而复杂数据类型包括Object,而所有其他引用类型(Array、Date、RegExp、Function、基本包装类型(Boolean、String、Number)、Math等)都是Object类型的实例对象,因此都可以继承Object原型对象的一些属性和方法。...
JavaScript的对象是引用类型,浅拷贝只会复制对象的引用,而深拷贝会创建一个新的独立对象。可以使用`JSON.parse()`和`JSON.stringify()`实现简单的深拷贝,但这种方法不适用于包含函数或循环引用的对象: ```...
本文实例讲述了javascript二维数组和对象的深拷贝与浅拷贝。分享给大家供大家参考,具体如下: 这篇文章主要为大家详细介绍了js实现数组和对象的深浅拷贝, 1.浅拷贝: 将原对象或原数组的引用直接赋给新对象,新...
在JavaScript中,实现深拷贝的方法包括递归复制、使用`JSON.parse(JSON.stringify(obj))`(适用于没有函数和循环引用的对象)以及使用某些库(如lodash的`_.cloneDeep()`)。 `JSON.parse(JSON.stringify(obj))`...
javascript中数组深拷贝途径及对象数组深拷贝 什么是浅拷贝 在js当中,我们常常遇到数组复制的的情况,许多人一般都会使用“=”来直接把一个数组赋值给一个变量,如: var a=[1,2,3]; var b=a; console.log(b); ...
copyPixels是ActionScript 3(AS3)中一个非常重要的功能,它允许开发者将一个显示对象的一部分复制到另一个位置。在处理遮挡和半透明效果时,copyPixels可以用于复制并覆盖已有像素,实现像素级别的遮挡。例如,当...
原型模式通过复制已有对象来创建新对象,减少了创建新对象的开销。C++中可以利用`clone`方法实现对象的深拷贝或浅拷贝,达到快速创建相似对象的目的。 六、装饰器模式(Decorator) 装饰器模式动态地给对象添加新的...