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