2

簡単なはずです。私はオブジェクトを持っています。変更したいのですが、変更する前に、元に戻せるコピーを保存したいと考えています。copy = original を設定しようとしましたが、元の属性を変更すると、コピーにも変更が表示されます。これは、actionscript で割り当てるたびに、実際には元のオブジェクトへの参照を格納するだけだからだと思います。後で使用するために元のオブジェクトのコピーを保存する最良の方法は何ですか?

4

3 に答える 3

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

乾杯!

于 2009-04-06T01:36:07.900 に答える
3
var newObj:Object = Object(ObjectUtil.copy(oldObj));

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

このメソッドは、コレクションの要素などのデータ オブジェクトをコピーするために設計されています。TextInput コントロールなどの UIComponent オブジェクトをコピーするためのものではありません。特定の UIComponent オブジェクトのコピーを作成する場合は、コンポーネントのサブクラスを作成し、clone() メソッドまたはコピーを実行する他のメソッドを実装できます。」

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

于 2009-04-06T03:33:04.860 に答える
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)
于 2009-04-06T01:26:08.907 に答える