As3复制对象

时间:2011-06-07 03:33:36

标签: actionscript-3 flex4

有时我们需要克隆一个对象。但是如果一个显示对象有一些子节点并使用这样的函数:

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

但结果没有孩子.. ..那我该怎么办?

2 个答案:

答案 0 :(得分:3)

不幸的是,在大多数情况下,动作脚本中的对象自动克隆是浪费时间。

您的代码段是正确的,但是通过ByteArray进行序列化/反序列化无法执行真正的深层复制,即复制所有引用和容器。 ByteArray技术仅适用于非参考数据类型(NumberintString等。)

所以没有银弹,只有一个适当的解决方案 - 手动为你的班级编写clone()方法。

答案 1 :(得分:1)

我自己还没有编写克隆方法,但是我发现了一种可以解决问题的方法。通过遍历所有变量(以xml表示形式),您可以将它们复制到类的新实例中。

您可以在此链接上找到我正在讨论的方法:http://www.learnosity.com/techblog/index.cfm/2008/2/6/AS3--Looping-over-properties-of-a-class

让我知道它是否有效,我有点好奇:)