Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Actionscript 3 AS3中是否有MemberwiseClone()等效项?_Actionscript 3 - Fatal编程技术网

Actionscript 3 AS3中是否有MemberwiseClone()等效项?

Actionscript 3 AS3中是否有MemberwiseClone()等效项?,actionscript-3,Actionscript 3,ActionScript3中是否有类似的功能?不,没有直接的方法可以实现内置于语言中的深度复制。但是,如果您不关心过度处理,也不想为每个对象编写自己的克隆方法,则可以使用内置于AS3中的内省,如下所述: 这是一个肤浅的副本;一个简单的方法就是迭代对象属性(可能仅限于“has-own”),并将值推送到一个新对象中。同样,请注意这是一个浅拷贝。你不能使用flash.utils.ByteArray对对象进行深度拷贝吗?这是一个好问题。如果可以序列化任何对象,然后创建一个新的ByteArray,只需从原

ActionScript3中是否有类似的功能?

不,没有直接的方法可以实现内置于语言中的深度复制。但是,如果您不关心过度处理,也不想为每个对象编写自己的克隆方法,则可以使用内置于AS3中的内省,如下所述:

这是一个肤浅的副本;一个简单的方法就是迭代对象属性(可能仅限于“has-own”),并将值推送到一个新对象中。同样,请注意这是一个浅拷贝。你不能使用
flash.utils.ByteArray
对对象进行深度拷贝吗?这是一个好问题。如果可以序列化任何对象,然后创建一个新的ByteArray,只需从原始字节中读取所有字节,然后将字节写入克隆的ByteArray,然后将该对象反序列化为一个可以工作的类型化类。这是你在想的吗,你看到了吗,还是你在想其他的方法?尝试研究这一点,您似乎需要实现IExternalizable,至少在这种情况下,编写克隆方法的工作量会减少。您还可以使用clone()函数创建IClone接口并在对象中实现。别忘了simple ByteArray序列化只保存公共值,所以你应该使用IExternalizable。好的方面,但实际上即使是克隆方法也只能复制公共可访问的部分(或至少通过构造函数参数设置的部分),毕竟,您只在类的一个实例中,您必须创建一个实例来返回,该实例需要具有可写属性才能正确克隆。如果CPU开销是可以接受的(比如不克隆数千个对象),我认为我删除的链接是“最佳”通用解决方案(比如不为每个对象编写代码);就CPU而言,克隆选项是“最佳”的,但也有缺陷(必须为每个对象编码)。ByteArray类型的解决方案一开始听起来不错,因为您可以获得内省解决方案的通用特性,但没有内省的开销。但是如果你实现了IExternalizable,我觉得它就像在每个对象上写一个克隆方法一样回到了同一条船上(idk我现在可能太累了,想不起来了……现在就离开它)。