« Airでクリップボードランチャを作ってみました | メイン | Spark Project の Utils ライブラリの ASDoc »
2008年7月 9日
[as3] イベントハンドラとarguments
今までまったく気づかなかったことなんですが
上記のようにイベントハンドラの中に「arguments」が入ってると、引数は別に定義されてなくてもいいみたい。
これは引数の数は関係ないみたいだけども、「...rest」が入ってると「arguments」が使えなくなるのでダメっぽい。
まあ、そもそも「...rest」入れてる時点で引数の数はあんまり関係なくなるけども。
じゃあ、普通に関数でも使えるかと思って試してみた。
で少し呼び出し方を変えてみる。
ようはイベントの通知には apply が使われてるってことか。
もしかして dispatchEvent もこの要領で「dispatchEvent.apply」とかすれば引数勝手に増やせるかも?
とか思ったけど、やっぱりそれはダメでした。
で、結局のところ「だから何なんだ」って話しで、
特に何も得することもないんですが。
通常、外部からの呼び出しの時は引数無しだったり、個定数の引数を渡さないといけなくしておいて
内部処理のみ、内緒でこっそり引数渡してやりたい時なんかは使えるかもしれないですね。
再起処理の時のフラグとか。
addEventListener("enterFrame", handler);
function handler():void {}
ってすると
ArgumentError: Error #1063: _fla::MainTimeline/handler() の引数の数が一致していません。0 が必要ですが、1 が指定されました。ってエラーが出て怒られるんだけども、
addEventListener("enterFrame", handler);
function handler():void { arguments; }
上記の場合はそのまま何事もなく実行される。上記のようにイベントハンドラの中に「arguments」が入ってると、引数は別に定義されてなくてもいいみたい。
これは引数の数は関係ないみたいだけども、「...rest」が入ってると「arguments」が使えなくなるのでダメっぽい。
まあ、そもそも「...rest」入れてる時点で引数の数はあんまり関係なくなるけども。
じゃあ、普通に関数でも使えるかと思って試してみた。
function test():void {arguments;}
test(1, 2, 3);
普通に怒られた。
引数の数が正しくありません。0個以下であることが必要です。って。
で少し呼び出し方を変えてみる。
function test():void {arguments;}
test.apply(null, [1, 2, 3]);
と、今度はすんなり通った。ようはイベントの通知には apply が使われてるってことか。
もしかして dispatchEvent もこの要領で「dispatchEvent.apply」とかすれば引数勝手に増やせるかも?
とか思ったけど、やっぱりそれはダメでした。
で、結局のところ「だから何なんだ」って話しで、
特に何も得することもないんですが。
通常、外部からの呼び出しの時は引数無しだったり、個定数の引数を渡さないといけなくしておいて
内部処理のみ、内緒でこっそり引数渡してやりたい時なんかは使えるかもしれないですね。
再起処理の時のフラグとか。
トラックバック(0)
このブログ記事を参照しているブログ一覧: イベントハンドラとarguments
このブログ記事に対するトラックバックURL: http://system.seyself.com/mt-tb.cgi/503

コメントする