var ref = this;
を書かなくてよくなる方法。
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);
}
– 参考サイト
コールバック関数内で親クラスのメソッドを実行する方法