Macromedia Flash非公式テクニカルノート Function.lengthプロパティ
説明Function.lengthプロパティ[*1]は、関数の定義に宣言された引数の数を返します。Functionインスタンスがつくられると、関数定義に宣言された引数の数が整数でFunction.lengthプロパティに与えられます。プロパティ値は読取り専用ですので、値は変えられません。 arguments.lengthプロパティが、呼出した関数の中(ローカルスコープ)で、実際に受取った引数の数を返すのとは異なります。なお、...(rest)パラメータ定義キーワードで定めた引数は、Function.lengthプロパティの示す引数の数には含まれません。
例Function.lengthプロパティがStarlingフレームワーク1.2で使われている例をふたつご紹介します。 まず、Starlingクラスです。Flash Player 11.4とAIR 3.4が公開され、「Stage3D Constrained Profile」が備わりました。Stage3Dコンテンツがハードウェアアクセラレーションのモードで動くデスクトップGPUとハードウェアの範囲を拡げられます(「Webアプリケーションの開発に最先端の技術を採入れる ー Flash Player 11.4およびAIR 3.4」02「StageVideoとStage3Dの機能追加」参照)。 Stage3D Constrained Profileは、Stage3D.requestContext3D()メソッドに新たに加えられた第2引数で定めます。デフォルト値はこれまでのバージョンとの互換を保つため、Baselineプロファイル("baseline")とされています。ところが、Starlingフレームワーク1.2では、これまでのコードを書替えることなく、より多くのPCでStage3Dのハードウェアアクセラレーションが使えるように、Constrainedプロファイル("baselineConstrained")をデフォルトにしました(F-site「Starlingフレームワーク1.2が公開される」の「Constrainedモード」参照)。 そのため、Starling()コンストラクタからStage3D.requestContext3D()メソッドを呼出すとき、Flash Player 11.4以降なら第2引数に"baselineConstrained"を加えます。けれど、それより前のFlash Playerでは、メソッドにふたつ引数を渡せばエラーが起こります。そこで、Starlingクラスの実装は、Flash Playerのバージョンを調べることなく、Function.lengthプロパティの値で与える引数の数を切り分けています。
つぎに、EventDispatcherクラスがあります。Starlingフレームワークのイベントリスナーは、定義済みActionScript 3.0とは異なり、イベントオブジェクトを受取る引数は省くことができます(「StarlingフレームワークのEventDispatcher.dispatchEventWith()メソッドと新しいイベント配信」参照)。 EventDispatcher.dispatchEvent()メソッドが内部的(private)に呼出すメソッドinvokeEvent()は、つぎのようにリスナー(listener)の引数の数を予めFunction.lengthプロパティで調べ(numArgs)、値が0のときはイベントオブジェクトは渡さずにリスナーを呼出すからです。なお、リスナーには第1引数のイベントオブジェクトに加え、Event.dataプロパティに加えた値を第2引数(event.data)として送ることもできます。
参考Mozilla Developer Network「Function.length」 作成者: 野中文雄 Copyright © 2001-2013 Fumio Nonaka. All rights reserved. |
||||||||||||||||||||||