应该很容易。我有一个对象。我想修改它,但我做之前,我要保存它的一个副本,我可以回去。我尝试设置复制=原,但是当我修改原有副本的属性,也显示了变化。我假定这是因为在ActionScript您指定的任何时间,它真的只存储原始对象的引用。所以,什么对我来说,存储原始对象的副本供以后使用?

最好的办法
有帮助吗?

解决方案

var newObj:Object = Object(ObjectUtil.copy(oldObj));

“复制指定对象,并返回到副本的引用。该副本使用本机序列化技术,这意味着自定义序列将在复制过程中的尊重。

此方法被设计用于复制数据对象,诸如集合的元素。它不旨在用于复制UIComponent对象,如TextInput控制。如果要创建特定UIComponent对象副本,则可以创建该组件的子类并实现clone()方法,或执行复制其它方法“。

HTTP://livedocs.adobe的.com /弯曲/ 3 / langref / MX / utils的/ ObjectUtil.html#拷贝()

其他提示

你所寻找的是对象的深层副本而不是通过引用传递。我在这里找到了答案,它使用新的ByteArray类在AS3:

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);

干杯!

 // 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)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top