[ActionScript 3.0] Objectクラスやdynamic class
【追記】
2011年7月24日 :オブジェクトリテラル
Objectクラスに動的にプロパティを追加して連想配列的に使う場合、プロパティ名(キー)に指定したオブジェクトは、あくまでその文字列表現が適用される(String()やtoString()から出力されるもの)。
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); コンパイルエラー
プロパティにオブジェクト型を指定した場合、 [object ClassName]という文字列が適用されるため、 値を得るときはその文字列を直接指定できる。
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
以上のことは動的クラス(dynamic class)でも同じ。
public dynamic class DynamicSample{} // Objectクラスだけでなく、動的クラスでも同じ var sample:DynamicSample = new DynamicSample; sample[123] = "num"; trace(sample["123"]); // output : num
オブジェクトリテラルを使って初期化する場合、キーは文字列定数(" “)を使わなくても直接文字列や数値を指定できる。
var obj:Object = { "x" : 0, y : 1, 32 : 3 };
ただし、たとえ文字列であっても、変数に格納された値や関数・メソッドの返り値を指定することはできない。
var num = 5; var obj:Object = { num : 5, Sample.num : 6, parseInt("32") : 7 };
上記の場合、numは値の5ではなく"num"という文字列がキーとして使われ、それ以外はコンパイルエラーとなる。
オブジェクトの参照をキーにした連想配列(動的コレクション)を使いたい場合は、Dictionaryクラスを使う。