Adobe Flex 3 ヘルプ

オブジェクトとしての関数

ActionScript 3.0 の関数はオブジェクトです。関数を作成すると、別の関数にパラメータとして渡すことができるだけではなく、プロパティとメソッドが関連付けられているオブジェクトが作成されます。

パラメータとして別の関数に渡される関数は、値渡しではなく、参照渡しによって渡されます。関数をパラメータとして渡す場合、識別子のみを使用し、メソッドを呼び出すために使用する括弧は使用しません。例えば、次のコードは、addEventListener() メソッドへのパラメータとして clickListener() という関数を渡します。

addEventListener(MouseEvent.CLICK, clickListener);

Array.sort() メソッドも、関数を受け入れるパラメータを定義します。Array.sort() 関数へのパラメータとして使用される独自のソート関数の例については、配列のソートを参照してください。

ActionScript を初めて使用するプログラマには奇妙に思えるかもしれませんが、他のオブジェクトと同様に関数にプロパティおよびメソッドを含めることができます。実際には、どの関数にも、その関数用に定義されたパラメータの数を格納する length という読み取り専用プロパティがあります。これは、関数に渡されたパラメータの数を報告する arguments.length プロパティとは異なります。ActionScript では、関数に渡されたパラメータの数がその関数用に定義されたパラメータの数を上回ってもかまいません。次の例では、strict モードでは渡されたパラメータの数と定義されたパラメータの数が完全に一致する必要があるので、standard モードでのみコンパイルされています。この例は 2 つのプロパティの違いを示します。

// Compiles only in standard mode
function traceLength(x:uint, y:uint):void
{
    trace("arguments received: " + arguments.length);
    trace("arguments expected: " + traceLength.length);
}

traceLength(3, 5, 7, 11);
/* output:
arguments received: 4
arguments expected: 2 */

standard モードの場合、独自の関数プロパティを定義するには、関数本体の外側で定義します。関数プロパティは、関数に関連する変数の状態を保存できる準静的なプロパティになります。例えば、特定の関数が呼び出される回数を追跡するとします。ゲームを記述していて、ユーザーが特定のコマンドを使用する回数を追跡する場合に、こうした機能は便利ですが、この場合静的クラスプロパティを使用することもできます。次の例では、strict モードでは関数に動的プロパティを追加できず、関数宣言の外側で関数プロパティが作成され、関数が呼び出されるたびにプロパティがインクリメントされるため、standard モードでのみコンパイルされています。

// Compiles only in standard mode
var someFunction:Function = function ():void
{
    someFunction.counter++;
}

someFunction.counter = 0;

someFunction();
someFunction();
trace(someFunction.counter); // 2

 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート