有时我们需要克隆一个对象。但是如果一个显示对象有一些子节点并使用这样的函数:
function clone(source:*):*
{
var b:ByteArray = new ByteArray();
b.writeObject(source);
b.position = 0;
return(b.readObject());
}
但结果没有孩子.. ..那我该怎么办?
答案 0 :(得分:3)
不幸的是,在大多数情况下,动作脚本中的对象自动克隆是浪费时间。
您的代码段是正确的,但是通过ByteArray
进行序列化/反序列化无法执行真正的深层复制,即复制所有引用和容器。
ByteArray
技术仅适用于非参考数据类型(Number
,int
,String
等。)
所以没有银弹,只有一个适当的解决方案 - 手动为你的班级编写clone()
方法。
答案 1 :(得分:1)
我自己还没有编写克隆方法,但是我发现了一种可以解决问题的方法。通过遍历所有变量(以xml表示形式),您可以将它们复制到类的新实例中。
您可以在此链接上找到我正在讨论的方法:http://www.learnosity.com/techblog/index.cfm/2008/2/6/AS3--Looping-over-properties-of-a-class
让我知道它是否有效,我有点好奇:)