动作 - 变量赋值没有参考?
-
23-08-2019 - |
题
应该很容易。我有一个对象。我想修改它,但我做之前,我要保存它的一个副本,我可以回去。我尝试设置复制=原,但是当我修改原有副本的属性,也显示了变化。我假定这是因为在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)
不隶属于 StackOverflow