ActionScript のオブジェクトは Java や C++ と少し違う点があります。それは、オブジェクトがプロパティの集合であるという点です。プロパティには関数も含まれます。そのため実行時に関数を代入することも可能です。また、関数も他のオブジェクトと同様に、固有のプロパティをやメソッドを持つことができます。
関数の定義
AS3 でのクラス定義の例を下に示します。ここでは、関数は function ステートメントを使用して定義されています。
class SampleClass { var sampleVar:String; function sampleFunction():Object { } }
さて、関数もプロパティなのですから、以下のような記述が可能です。
class SampleClass { var sampleVar:String; var sampleFunction:Function; }
上の例では、Function 型のプロパティ sampleFunction を宣言しています。冒頭に書いたように、このような宣言をしておくと実行時に Function オブジェクト(正しくは、Function オブジェクトへのリファレンス)を sampleFunction プロパティに代入することができます。
そのため、function 式を使って、以下のような形で関数定義をすることも可能です。(注:この function キーワードはエクスプレッションで、関数定義をする function ステートメントとは別のものです。)
class SampleClass { var sampleVar:String; var sampleFunction:Function = function ():Object { } }
一番最初に紹介した形式での関数定義の方が見やすいと思いますし、クラス定義にこの書き方はあまりお勧めしません。
関数のオーバーライド
クラスを拡張して別のクラスを定義するとき関数を上書きして定義する場合には override を付けます。override は Function 型のプロパティがメソッドのように扱われること、すなわち上書きされる関数とシグニチャが同一になることを保障します。
class ExtendedClass extends SampleClass { var sampleVar:String; override function sampleFunction():Object { } }
継承については、また別途詳しく説明します。
コメントする