Array, Objectの複製は前回 Flex API Helpに書かれていた方法で実現できました。
ところが mx ライブラリのAPIをながめているとすでに便利そうなClassが用意されているようです。
mx.utils.ObjectUtil
用意されているメソッドにそれらしきものがあります。
clone
指定されたオブジェクトのクローンを作成し、クローンへの参照を返します。クローンの作成は、ネイティブ直列化方法を使用して行われます。つまりクローン作成中にカスタム直列化が順守されます。clone() は、各オブジェクトインスタンスの uid プロパティが維持される点が copy() と異なります。
copy
指定されたオブジェクトをコピーし、コピーへの参照を返します。コピーは、ネイティブ直列化方法を使用して行われます。つまり、コピー中にカスタム直列化が順守されます。
いまいち違いが分からないのですが uid
の部分だけが違うようです。
import mx.utils.ObjectUtil; var obj:Object = { red : "赤", blue : "青", white : "白" } var ref:Object = obj; var copied:Object = ObjectUtil.copy(obj); var cloned:Object = ObjectUtil.clone(obj); ref.red = "あか"; trace(obj.red, ref.red, copied.red, cloned.red); // あか あか 赤 赤 trace(ObjectUtil.toString(copied)); /* (Object)#0 blue = "青" red = "赤" white = "白" */ trace(ObjectUtil.toString(cloned)); /*(Object)#0 blue = "青" red = "赤" uid = (null) white = "白" */ |
ObjectUtil.clone
を使い複製すると uid
プロパティができました。
clone, copy も前回のByteArrayを使ってAMF 化する方法と同じような処理みたいです。
ObjectUtil.toString
は Objectの中身(?)を表示してくれる便利な関数です。
インスタンスも表示してくれます。
mx.utils
には他にも便利そうなクラスが色々あります。
mx
パッケージ自体がかなり便利そうです。
知らないと色々損すると思わされました。
* Flash CS5で使うためにはFlex SDKのswcライブラリにパスを通して下さい。
Flash CS5でmxライブラリを使う
update 2011-05-17
mx.utils.ObjectUtil で複製可能なものは Object 型に限られているようでした。