AS3の「メソッドクロージャ」が実はとても役立つことがわかった。
関数スコープ — Flex 2
メソッドクロージャ
ActionScript 3.0 では、元のオブジェクトインスタンスを自動的に記憶するメソッドクロージャが有効です。この機能はイベント処理に役立ちます。ActionScript 2.0 では、メソッドクロージャに抽出元のオブジェクトインスタンスが記憶されず、メソッドクロージャが呼び出されたときに予期しない動作が発生しました。mx.utils.Delegate クラスは一般的な方法でしたが、不要になりました。
Flex2/ActionScript3.0/関数 – PukiWiki
* 関数をクラスの一部として定義した場合と、インスタンスに関連付けた場合はメソッドと呼ぶ。
* それ以外の方法で定義された場合はメソッドクロージャと呼ぶ
上から2つ目のtrace(this)の結果 “[object MainTimeline]” がメソッドクロージャの効果。
/* ActionScript3 */
Tweener.addTween(this._btnMc, {alpha: 0.5, time:1, onComplete: function():void{trace(this);}});
//結果: [object MovieClip] (addTweenで扱ったオブジェクト)
Tweener.addTween(this._btnMc, {alpha: 0.5, time:1, onComplete: this.onCompleteFunc});
private function onCompleteFunc():void{
trace(this);
}
//結果: [object MainTimeline] (addTween呼び出し元のthis)
AS2ではこうならなかった。
/* ActionScript2 */
Tweener.addTween(this._btnMc, {_alpha: 50, time:1, onComplete: function():Void{trace(this);}});
//結果: _level0.btn_mc (addTweenで扱ったオブジェクト)
Tweener.addTween(this._btnMc, {_alpha: 50, time:1, onComplete: this.onCompleteFunc});
private function onCompleteFunc():void{
trace(this);
}
//結果: _level0.btn_mc (addTweenで扱ったオブジェクト)
more >