当前位置:  开发笔记 > 编程语言 > 正文

如何在Flex中克隆对象?

如何解决《如何在Flex中克隆对象?》经验,为你挑选了2个好方法。

我想克隆一个Canvas对象,它包含一个带有几个Geometry形状的Degrafa Surface.

我尝试了天真的方法:

return ObjectUtil.copy(graph_area) as Canvas;

导致错误:

TypeError: Error #1034: Type Coercion failed: cannot convert Object@63b1b51 to com.degrafa.geometry.Geometry.
TypeError: Error #1034: Type Coercion failed: cannot convert Object@63b1039 to com.degrafa.geometry.Geometry.
TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at mx.core::Container/addChildAt()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\Container.as:2196]
    at mx.core::Container/addChild()[C:\autobuild\3.2.0\frameworks\projects\framework\src\mx\core\Container.as:2140] ...

LiraNuna.. 9

您想要的是一个深层复制,生成一个与原始信息相同的新实例.

我知道如何做的唯一方法是使用ByteArray如下:

private function clone(source:Object):*
{
    var buffer:ByteArray = new ByteArray();
    buffer.writeObject(source);
    buffer.position = 0;
    return buffer.readObject();
}

AS3真的缺少Object.clone()......



1> LiraNuna..:

您想要的是一个深层复制,生成一个与原始信息相同的新实例.

我知道如何做的唯一方法是使用ByteArray如下:

private function clone(source:Object):*
{
    var buffer:ByteArray = new ByteArray();
    buffer.writeObject(source);
    buffer.position = 0;
    return buffer.readObject();
}

AS3真的缺少Object.clone()......


如果你看一下ObjectUtil.copy()的来源,它会做同样的事情.

2> Fernando Bri..:

ObjectUtil

静态方法ObjectUtil.copy()是AS3的"Object.clone()":

public static function copy(value:Object):Object

复制指定的Object并返回对副本的引用.使用本机序列化技术进行复制.这意味着在复制期间将遵循自定义序列化.

此方法用于复制数据对象,例如集合的元素.它不用于复制UIComponent对象,例如TextInput控件.如果要创建特定UIComponent对象的副本,可以创建组件的子类并实现clone()方法或其他方法来执行复制.

推荐阅读
雨天是最美
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有