var ref = this;
を書かなくてよくなる方法。

イベントの委譲 (Delegateクラス)

import mx.utils.Delegate;
compInstance.addEventListener(イベント名, Delegate.create(スコープオブジェクト, 関数));

TweenerのonCompleteやonUpdateにも便利。


– 問題点 onCompleteのthisをクラスのインスタンス自体にしたい。

/* ActionScript2 */

setTween();
private function setTween():Void{
Tweener.addTween(this._targMc, {_x:100, time:1, onComplete: this.onCompleteTween});
}
private function onCompleteTween():Void{
//thisがthis._targMcになる。
trace(this);
}

– 解決法: Delegate使用

/* ActionScript2 */

import mx.utils.Delegate;
setTween();
private function setTween():Void{
Tweener.addTween(this._targMc, {_x:100, time:1, onComplete: Delegate.create(this, this.onCompleteTween});
}
private function onCompleteTween():Void{
//thisがTweener.addTweenの呼び出し元(this)と同じになる。
trace(this);
}

– 解決法: Delegate未使用

/* ActionScript2 */

import mx.utils.Delegate;
setTween();
private function setTween():Void{
var ref = this;
var obj:Object = new Object();
obj.func = function(){
ref.onCompleteTween();
}
Tweener.addTween(this._targMc, {_x:100, time:1, onComplete: obj.func});
}
private function onCompleteTween():Void{
//thisがTweener.addTweenの呼び出し元(this)と同じになる。
trace(this);
}

– 参考サイト
コールバック関数内で親クラスのメソッドを実行する方法