イナヅマTVログ

ActionScript 3, 配列とオブジェクトを複製する – 2

| 0件のコメント

Array, Objectの複製は前回 Flex API Helpに書かれていた方法で実現できました。
ところが mx ライブラリのAPIをながめているとすでに便利そうなClassが用意されているようです。

mx.utils.ObjectUtil
用意されているメソッドにそれらしきものがあります。

clone
copy

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 型に限られているようでした。

コメントを残す