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

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

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

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

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

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
AS3習得本
AS3の全容を学習できる本。この中でどれか1冊自分に合ったものを。
Adobe Flash CS4 詳細!ActionScript3.0入門ノート ActionScript3.0 プロフェッショナルガイド 初めてのActionScript 3.0 Flashユーザーのためのステップアップガイド 詳説 ActionScript 3.0 Actionscript 3.0 Cookbook
AS3発展本
ASでアニメーションさせる面白さを知るための本。
Flash Math & Physics Design:ActionScript 3.0による数学・物理学表現[入門編] ActionScript 3.0 アニメーション AdvancED ActionScript 3.0 Animation (Advanced)
AS2
"Flash"ではなく"ActionScript2.0"学習のための良著。他にもいろいろ読んだけど、この4冊を読んだ後、自分が成長できた感じがしました。
FLASH ActionScript 2.0入門完全ガイド+実践サンプル集 [CD-ROM付] Essential Actionscript 2.0 Flash 8 Essentials Foundation Actionscript Animation: Making Things Move (Foundation)

あわせて読みたいブログパーツ

相互リンク

hi-posiさん
携帯Flashといえばhi-posiの岡田昇三さん。FlashLiteの有益な記事もたくさん書かれていていつもお世話になってます。ついにご挨拶させていただきました。面白すぎる人でしたw。

Return to page top