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--复制的对象属性:引用还是值?_Actionscript 3 - Fatal编程技术网

Actionscript 3 AS3--复制的对象属性:引用还是值?

Actionscript 3 AS3--复制的对象属性:引用还是值?,actionscript-3,Actionscript 3,(在AS3中)我知道,当我复制字典时,它会创建一个浅显的副本,我可以在不影响原件的情况下对其进行修改。 如果创建对象的副本,是否可以在不影响原始对象属性的情况下修改副本的属性?这取决于属性类型,如果是不可变值(如字符串),则可以,但如果是对象,则必须使用深度副本 如果您想要对象的深层副本,并且可以在不改变原始副本的情况下对其进行修改,请创建一个util类并声明此方法 private function clone(obj:Object):Object { var temp:ByteArra

(在AS3中)我知道,当我复制字典时,它会创建一个浅显的副本,我可以在不影响原件的情况下对其进行修改。

如果创建对象的副本,是否可以在不影响原始对象属性的情况下修改副本的属性?

这取决于属性类型,如果是不可变值(如字符串),则可以,但如果是对象,则必须使用深度副本

如果您想要对象的深层副本,并且可以在不改变原始副本的情况下对其进行修改,请创建一个util类并声明此方法

private function clone(obj:Object):Object {
    var temp:ByteArray = new ByteArray();
     temp.writeObject(obj);
     temp.position = 0;
     return temp.readObject();
}
请注意,如果使用Flex,则可以使用
ObjectUtil.copy()



更新:还要注意,
显示对象
实例(或继承的类实例)几乎不可能进行深度复制。

这取决于属性类型,如果它是不可变的值(如字符串),则可以,但如果它是对象,则必须使用深度复制

如果您想要对象的深层副本,并且可以在不改变原始副本的情况下对其进行修改,请创建一个util类并声明此方法

private function clone(obj:Object):Object {
    var temp:ByteArray = new ByteArray();
     temp.writeObject(obj);
     temp.position = 0;
     return temp.readObject();
}
请注意,如果使用Flex,则可以使用
ObjectUtil.copy()



更新:还要注意,
显示对象
实例(或继承的类实例)几乎不可能深入复制。

不,您不能。但是,您可以使用:

ObjectUtil.clone(object);
缺点是无法克隆UIC组件

文件说:

克隆指定的对象并返回对克隆的引用。克隆是使用本机序列化技术生成的。这意味着在克隆过程中将遵守自定义序列化。clone()与copy()的不同之处在于保留了每个对象实例的uid属性。
此方法设计用于克隆数据对象,例如集合的元素。它不用于克隆UIComponent对象,例如TextInput控件。如果要克隆特定的UIComponent对象,可以创建该组件的子类并实现clone()方法。

不可以。但是,您可以使用:

ObjectUtil.clone(object);
缺点是无法克隆UIC组件

文件说:

克隆指定的对象并返回对克隆的引用。克隆是使用本机序列化技术生成的。这意味着在克隆过程中将遵守自定义序列化。clone()与copy()的不同之处在于保留了每个对象实例的uid属性。 此方法设计用于克隆数据对象,例如集合的元素。它不用于克隆UIComponent对象,例如TextInput控件。如果要克隆特定的UIComponent对象,可以创建组件的子类并实现clone()方法