ActionScriptの - 参照することなく変数の代入?
-
23-08-2019 - |
質問
簡単にする必要があります。私は、オブジェクトを持っています。私はそれを変更したいのですが、私は前に私は、私は戻って行くことができ、それのコピーを保存します。私は元=コピーを設定してみましたが、私は、元の属性を変更するときコピーにも変化を示しています。私は、ActionScriptであなたが割り当てた任意の時間が、それは本当にただ、元のオブジェクトへの参照を格納するため、これがあると仮定しています。だから、いただきました!私は後で使用するために、元のオブジェクトのコピーを格納するための最良の方法は?
解決
var newObj:Object = Object(ObjectUtil.copy(oldObj));
「コピー指定されたオブジェクトやコピーへの参照を返します。コピーはネイティブシリアル化技術を用いて行われる。これは、カスタム直列にコピー中に尊重されることを意味します。
この方法は、コレクションの要素としてデータオブジェクトを、コピーするために設計されています。このようなTextInputコントロールとして、UIComponentオブジェクトをコピーするためのものではありません。あなたが特定のUIComponentオブジェクトのコピーを作成する場合は、コンポーネントのサブクラスを作成し、コピーを実行するには、clone()メソッド、または他の方法を実装することができます。 "
のhttp://livedocs.adobe .COM /フレックス/ 3 / langref / MX / utilsの/ ObjectUtil.html#コピー()の
他のヒント
あなたが探していることは参照渡しではなく、オブジェクトのディープコピーです。私は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);
乾杯!
// 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)