[ActionScript 3.0] Objectクラスやdynamic class

【追記】
2011年7月24日 :オブジェクトリテラル

Objectクラスに動的にプロパティを追加して連想配列的に使う場合、プロパティ名(キー)に指定したオブジェクトは、あくまでその文字列表現が適用される(String()やtoString()から出力されるもの)。
[as3]
var obj:Object = new Object;
obj[123] = “num";
obj[“123"] = “string";

trace(obj[123]); // 内部で文字列"123″に変換される
trace(obj[“123"]);

for (var key:String in obj) {
trace(key);
}

// プロパティ(キー)が数字で始まる場合、ドット演算子ではアクセスできない
// trace(obj.123); コンパイルエラー
[/as3]
プロパティにオブジェクト型を指定した場合、 [object ClassName]という文字列が適用されるため、 値を得るときはその文字列を直接指定できる。
[as3]
var obj:Object = new Object;
obj[new Sprite] = “sprite";
obj[new Shape] = “shape";

for (var key:String in obj) {
trace(key);
}
/* output :
[object Sprite]
[object Shape]
*/

// プロパティにオブジェクト型を指定した場合、
// [object ClassName]という文字列が適用されるため、
// 値を得るときはその文字列を直接指定できる
trace(obj[“[object Sprite]"]); // output : sprite

// インスタンスを指定しても同じ
var spr:Sprite = new Sprite;
trace(obj[spr]); // output : sprite
trace(obj[spr.toString()]); // output : sprite
[/as3]
以上のことは動的クラス(dynamic class)でも同じ。
[as3]
public dynamic class DynamicSample{}

// Objectクラスだけでなく、動的クラスでも同じ
var sample:DynamicSample = new DynamicSample;
sample[123] = “num";

trace(sample[“123″]); // output : num
[/as3]

オブジェクトリテラルを使って初期化する場合、キーは文字列定数(" “)を使わなくても直接文字列や数値を指定できる。

[as3]
var obj:Object = { “x" : 0, y : 1, 32 : 3 };
[/as3]

ただし、たとえ文字列であっても、変数に格納された値や関数・メソッドの返り値を指定することはできない。

[as3]
var num = 5;
var obj:Object = { num : 5, Sample.num : 6, parseInt(“32") : 7 };
[/as3]

上記の場合、numは値の5ではなく"num"という文字列がキーとして使われ、それ以外はコンパイルエラーとなる。

オブジェクトの参照をキーにした連想配列(動的コレクション)を使いたい場合は、Dictionaryクラスを使う。