as3:如何按值复制对象
我需要在每个其他对象中都有一个共同对象的实例。我正在对每个子对象中的对象值进行修改。
例如。我有一张瓷砖地图,一个机器人按特定顺序移动它们。每个机器人都标记着已经被他访问过的瓷砖,因为访问=真。但总的来说我不希望改变主地图......
我试图建立一个例子:
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
applicationComplete="complete()">
<mx:Script>
<![CDATA[
private var array:Array = new Array( 1, 2, 3, 4);
public function complete():void
{
trace("here " + array);
var a:Array = array;
a[0] = 100;
trace("here " + array);
}
]]>
</mx:Script>
</mx:Application>
有人可以帮我理解如何通过值(不是通过引用)复制数组,例如数组
没有找到相关结果
已邀请:
3 个回复
嘘崇蔡对
编辑: 可能包含一些语法错误......
稀瓣囊
嘘崇蔡对
这涵盖了自定义克隆方法的第一个问题,以及上面的第一个问题。如您所见,所有对象及其内容都是使用内置方法复制的。 我在这里展示了如何创建克隆方法的实现,但是你可以在:mx.utils.ObjectUtil中找到一个。 如果要深度复制一个私有存储其数据的对象,则必须实现IExternalizable接口。这将迫使您实现两种方法:
在这些函数中,您将私有变量写入输出对象,然后从输入到私有变量读取它们。然后,当您调用clone时,您将获得对象的完整副本。请记住对所有嵌套对象执行此操作。 这是一个包含两个类的简单实现示例:
和:
测试它们:
这涵盖了自定义克隆方法的第二个问题。正如您所看到的,我们不必担心调用任何克隆方法,这一切都得到了我们的关注。 我并不是说它并非完全没有缺点,但它确实为深度复制对象提供了一些功能。 一些缺点包括: 您不能在构造函数中包含任何必需的参数。 它不存储引用数据,因此如果两个对象包含相同的引用,则将返回两个不同的对象。 克隆方法放在哪里。我认为它真的属于Object,可能就原型而言。这样可以使每个对象都可以复制,如果您愿意,可以准确指定对象的复制方式。 请参阅Adobe关于复制阵列的观点:http://livedocs.adobe.com/flex/3/html/help.html?content = 10_Lists_of_data_6.html 另请注意,Adobe从Java中窃取了这种技术。