ダイナミッククラス
クラスをダイナミック(dynamic)にすると、実行時にプロパティやメソッドを追加できます。
クラス定義(Kitten.as):
package { // dynamicクラス public dynamic class Kitten { public var name:String = "mii"; public function run():String { return "run!"; } } }
メイン(dynamic_object.as):
// メイン public function main():void { var k:Kitten = new Kitten(); k.type = "mike"; // プロパティを後から追加。 k.age = 1; k.meow = function():String { // メソッドを後から追加。 return "meow!\n"; }; // 追加したプロパティ、メソッドにアクセス。 stdout.text += k.name + " : " + k.type + " : " + k.age + "\n"; stdout.text += k.meow(); }
<?xml version="1.0" encoding="utf-8"?> <mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete = "main()" > <mx:TextArea id="stdout" width="200" height="200" /> <mx:Script source="./dynamic_object.as"/> </mx:Application>
for eachでのプロパティの列挙
動的に追加したプロパティのみ、forで列挙できます。
// メイン public function main():void { var k:Kitten = new Kitten(); k.type = "mike"; // プロパティを後から追加。 k.age = 1; k.meow = function():String { // メソッドを後から追加。 return "meow!\n"; }; // プロパティを列挙 / 後から追加したもののみ列挙される。 for ( var i:Object in k ) { stdout.text += i + " : " + k[i] +"\n"; } }