for..inループの仕様変更と、describeTypeメソッドについて
for..inループの仕様変更
ActionScript2まではfor..inループでクラスメンバを列挙することが出来ましたが、ActionScript3では、dynamicなクラスにおいて、後から追加されたプロパティやメソッドしか列挙しないように変更されています。
次の例では、コンソールには何も出力されません。
class SomeClass
{
public var propertyA:uint = 1;
public var propertyB:uint = 2;
}
var someClass:SomeClass = new SomeClass();
for(var key:String in someClass)
{
trace(key);
}
次の例では、propertyCのみが出力されます。
dynamic class SomeClass
{
public var propertyA:uint = 1;
public var propertyB:uint = 2;
}
var someClass:SomeClass = new SomeClass();
someClass.propertyC = 3; // 新しいプロパティを作成
for(var key:String in someClass)
{
trace(key); // 出力 : propertyC のみ
}
予め定義されたクラスメンバを列挙したい場合は、新しく追加されたdescribeTypeメソッドを使用します。
describeTypeメソッド
上記の仕様変更に伴い、新しくflash.utilパッケージにdescribeTypeメソッドが追加されました。
これは、インスタンスに関する詳細な情報を返すメソッドで、クラス名やdynamic/final/static、メンバや引数などを取得できます。
結果はXML形式なので、E4Xを使用して柔軟な操作が可能です。次の例では、someObjectのクラスが持つメソッドの名前を全て列挙します。
import flash.util.describeType;
for each(var method:XML in describeType(someObject)..method)
{
trace(method.@name);
}
ちなみに、どのような形式のXMLが返ってくるかは、
trace(describeType(someObject).toXMLString());
と、XMLを実際にコンソールに表示してみると参考になるでしょう。
サイト内関連記事
この記事へのトラックバック
トラックバックはありません。
TrackBack URL:
http://www.be-interactive.org/trackback.php?id=26

コメントはありません。