(在AS3中)我知道当我复制字典时,它会创建一个浅拷贝,我可以在不影响原件的情况下进行修改。
如果我创建了一个对象的副本,我可以修改副本的属性而不影响原始属性吗?
答案 0 :(得分:4)
它取决于属性类型,如果它是一个不可变的值,比如字符串就可以,但如果它是一个对象,那么你必须使用深层复制。
如果你想要一个你可以修改的对象的深层副本而不改变原来的make一个util类并声明这个方法
private function clone(obj:Object):Object {
var temp:ByteArray = new ByteArray();
temp.writeObject(obj);
temp.position = 0;
return temp.readObject();
}
请注意,如果您使用的是Flex,则可以使用ObjectUtil.copy()
。
更新:另请注意,DisplayObject
实例(或继承的类实例)几乎无法进行深度复制。
答案 1 :(得分:1)
不,你不能。但是你可以使用:
ObjectUtil.clone(object);
缺点是您无法克隆UIComponents
文档说:
克隆指定的Object并返回对该克隆的引用。克隆使用本机序列化技术制作。这意味着在克隆过程中将遵循自定义序列化。 clone()与copy()的不同之处在于保留了每个对象实例的uid属性。 此方法用于克隆数据对象,例如集合的元素。它不用于克隆UIComponent对象,例如TextInput控件。如果要克隆特定的UIComponent对象,可以创建组件的子类并实现clone()方法。