- 2009-08-25 (火) 14:58
- action script
タイトルの通り、そういうことをしたい時があります。
探したら apeirophobia さまのブログに書かれていました。
apeirophobia: addEventListenerで一緒に引数を渡したい
addEventListener(Event.SELECT, hoge(3));
private function hoge(num:int){
return function(e:Event):void{
trace("番号:"+num);
}
}
みたいな感じにするそうな。
hogeメソッドにvoid指定するとなんでエラーになるのかとか、そういうプログラム的なことにあまり興味が湧かずにコピペして動いて安心してしまう僕はプログラマ属性ゼロだなぁと思ったりした。
- Newer: FITC Tokyo 2009
- Older: mixiアプリ「カカカカ」
Comments:5
- nitoyon 09-08-25 (火) 23:01
-
hoge が返すのは関数なので戻り値を明示したいなら
> private function hoge(num:int):Function{
とするとよいでしょう! - tera 09-08-26 (水) 11:38
-
にとよんさん
どうもありがとうございます。
関数を返すって概念あたりが僕の知識の向こう側ですw。
教えていただくとなんとなくはわかるのですが、本来の引数のEventがそれで渡せるんや~みたいなことがなんだか不思議な感じです。 - alumican 09-09-15 (火) 19:48
-
この方法だとremoveEventListenerできずにうっかりメモリリークしてしまいがちなので気をつけてください。
関数クロージャによって登録されたイベントハンドラをリムーブしたいときにはハンドラ内で
removeEventListener(Event.SELECT, arguments.callee);
を実行できるようにしておくといいです。 - tera 09-09-15 (火) 19:50
-
おぉ、そうなんですね!ありがとうー。
- taka:nium 09-09-15 (火) 20:01
-
対象とイベント名をそれぞれ e.target と e.type にしておけば、毎回書き変えなくて済みますよー。
var listener:Function = function( num:int ):Function {
return function( e:Event ):void {
e.target.removeEventListener( e.type, arguments.callee );
trace( num );
}
};
stage.addEventListener( MouseEvent.CLICK, listener( 3 ) );






![Flash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編]](http://ecx.images-amazon.com/images/I/617sNhK9P9L._SL75_.jpg)


![FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付]](http://ecx.images-amazon.com/images/I/51915J1BG6L._SL75_.jpg)


