ActionScript3でaddEventListenerの関数に引数
ActionScript3ではイベントリスナーを多様するのですが、そのイベントリスナーで指定する関数に引数を渡したくて、少し調べてみました。
これを単純に実装しようとすると、以下のようにグローバルな値経由で無名関数の中に値を参照させることができるみたいです。
this.x = "てすと";
mc.addEventListener(Event.RESIZE, function(){
trace(this.x);
});
結果はデバッグで「てすと」が出力されます。
しかし、これだと無名関数のためイベントの解除が難しそうです。さらには、関数が流用できないという欠点があります。
調べるとすぐに見つけることができたのですが、ActionScript3では以下のような記述が可能なようです。
this.x = "てすと";
mc.addEventListener(Event.RESIZE, test(this.x));
function test(x:String) {
return function(e) {
trace(this.x);
}
}
結果は先ほどの記述の同じです。この方法だと、関数testに引数を渡すこともできて、イベントの解除もできます。さらには関数testを流用することもできます。
他のプログラムではちょっとお目にかからない記述ですね。Flashをやる上では憶えておきたいテクニックです。
コメントする