应该很容易。我有一个对象。我想修改它,但在我之前我想要保存它的副本,我可以回去。我尝试设置copy = original但是当我修改原始属性时,副本也会显示更改。我假设这是因为在你分配的任何时候在动作脚本中,它实际上只存储对原始对象的引用。那么我最好的方法是存储原始对象的副本供以后使用吗?
答案 0 :(得分:3)
您正在寻找的是对象的深层副本,而不是通过引用传递。我在这里找到了答案,它在AS3中使用了新的ByteArray类:
http://www.kirupa.com/forum/showthread.php?p=1897368
function clone(source:Object):* {
var copier:ByteArray = new ByteArray();
copier.writeObject(source);
copier.position = 0;
return(copier.readObject());
}
然后你可以这样使用:
newObjectCopy = clone(originalObject);
干杯!
答案 1 :(得分:3)
var newObj:Object = Object(ObjectUtil.copy(oldObj));
“复制指定的Object并返回对副本的引用。该副本使用本机序列化技术进行。这意味着在复制过程中将遵循自定义序列化。
此方法用于复制数据对象,例如集合的元素。它不用于复制UIComponent对象,例如TextInput控件。如果要创建特定UIComponent对象的副本,可以创建组件的子类并实现clone()方法或其他方法来执行复制。“
http://livedocs.adobe.com/flex/3/langref/mx/utils/ObjectUtil.html#copy()
答案 2 :(得分:0)
// duplicate any given Object (not MCs)
Object.prototype.copy = function()
{
ASSetPropFlags(Object.prototype,["copy"],1);
var _t = new this.__proto__.constructor(this) //
for(var i in this){
_t[i] = this[i].copy()
}
return _t
};
用法
x = ["1","2","3",[4,5],[{a:1,b:2}]]
y = x.copy()
y[0] = 0
y[3][0]="d"
trace(x)
trace(y)