Actionscript - 没有引用的变量赋值?

时间:2009-04-06 01:07:57

标签: actionscript-3 variable-assignment

应该很容易。我有一个对象。我想修改它,但在我之前我想要保存它的副本,我可以回去。我尝试设置copy = original但是当我修改原始属性时,副本也会显示更改。我假设这是因为在你分配的任何时候在动作脚本中,它实际上只存储对原始对象的引用。那么我最好的方法是存储原始对象的副本供以后使用吗?

3 个答案:

答案 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)