应该很容易。我有一个对象。我想修改它,但在此之前我想保存一份我可以返回的副本。我尝试设置 copy = original 但是当我修改原始属性时,副本也会显示更改。我假设这是因为在您分配的任何时候在 actionscript 中,它实际上只是存储对原始对象的引用。那么我存储原始对象的副本以供以后使用的最佳方式是什么?
mrjrdnthms
问问题
3331 次
3 回答
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);
干杯!
于 2009-04-06T01:36:07.900 回答
3
var newObj:Object = Object(ObjectUtil.copy(oldObj));
“复制指定的对象并返回对副本的引用。副本是使用本机序列化技术制作的。这意味着在复制期间将尊重自定义序列化。
此方法设计用于复制数据对象,例如集合的元素。它不适用于复制 UIComponent 对象,例如 TextInput 控件。如果要创建特定 UIComponent 对象的副本,可以创建组件的子类并实现 clone() 方法或其他方法来执行复制。”
http://livedocs.adobe.com/flex/3/langref/mx/utils/ObjectUtil.html#copy()
于 2009-04-06T03:33:04.860 回答
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)
于 2009-04-06T01:26:08.907 回答