addEventListenerで実行するメソッドにパラメーター渡す

タイトルの通り、そういうことをしたい時があります。

探したら apeirophobia さまのブログに書かれていました。
apeirophobia: addEventListenerで一緒に引数を渡したい

addEventListener(Event.SELECT, hoge(3));
private function hoge(num:int){
	return function(e:Event):void{
		trace("番号:"+num);
	}
}

みたいな感じにするそうな。
hogeメソッドにvoid指定するとなんでエラーになるのかとか、そういうプログラム的なことにあまり興味が湧かずにコピペして動いて安心してしまう僕はプログラマ属性ゼロだなぁと思ったりした。

このエントリーをはてなブックマークに追加
はてなブックマーク - addEventListenerで実行するメソッドにパラメーター渡す

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 ) );

Comment Form
Remember personal info

Return to page top