2009-04-06 14 views
2

簡単にする必要があります。私には物体があります。私はそれを修正したいが、私は前に戻ることができるコピーを保存したい。私はcopy = originalを設定しようとしましたが、オリジナルの属性を変更するとコピーにも変更が示されます。私はこれを仮定しているのは、あなたが割り当てるときにいつでもactionscriptで、それは本当に元のオブジェクトへの参照を格納するだけだからです。それで、後で使うために元のオブジェクトのコピーを保存するための最良の方法は何ですか?Actionscript - 参照なしの変数割り当て?

答えて

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

「コピー指定されたオブジェクトのコピーへの参照を返す。コピーは、ネイティブ直列化技術を用いて作られる。これは、カスタムシリアル化がコピー中に尊重されることを意味する。

この方法は、設計されています特定のUIComponentオブジェクトのコピーを作成する場合は、そのコンポーネントのサブクラスを作成し、そのオブジェクトのサブクラスを作成することができます。 clone()メソッド、またはコピーを実行する他のメソッドを呼び出すことができます。

http://livedocs.adobe.com/flex/3/langref/mx/utils/ObjectUtil.html#copy()

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) 
+0

これはひどいソリューションである、任意のオブジェクトが少しだけ複雑に正しくコピーされません。さらにObjectプロトタイプに追加するのは良い方法ではありません。私は、プロトタイプに何かを加えることは悪い習慣であるといっても意味があります。これは、機能よりも遺物のほうが残っています。 –

3

は参照渡しではなく、オブジェクトのディープコピーです。

newObjectCopy = clone(originalObject); 

乾杯:あなたは、このように使用

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

}

:私はAS3に新しいByteArrayクラスを使用して、ここで答えを見つけました!

+0

シリアル化する前にクラスエイリアスを登録すると、デシリアライズ後にオブジェクトを適切なクラスに保持できます。 flash.net.registerClassAliasを参照してください – preaction

関連する問題