ASでコールバック的な処理の書き方

月曜日, 8月 17th, 2009

こんにちは、なかわけです。

先日仕事をしていて、自分で書きながらこんな書き方できるんだなーという思ったのでメモ。

MainのなかでSubのインスタンスを生成する際、引数としてMainのfunctionを与えると、SubインスタンスからMainのfunctionが実行できるというもの。
このサンプルのコードでは意味のない処理をしてますが、実際にはSubのアニメーション処理が終わったらMainの処理を実行するというようなFlashを作ってました。

Main.as

package{
	import flash.display.MovieClip;
	import Sub;

	public class Main extends MovieClip{

		public function Main(){
			var subObj:Sub = new Sub(result);
		}

		public function result(num:uint):void{
			trace('結果は' + num + 'でした');
		}
	}
}

Sub.as

package{
	import flash.display.MovieClip;

	public class Sub extends MovieClip{

		public function Sub(callback:Function){
			var resultNum:uint = Math.floor(Math.random()*100);
			callback(resultNum);
		}
	}
}

はたしてこういう書き方してよかったのだろうか・・・。

Tags:

2 Responses to “ASでコールバック的な処理の書き方”

  1. エスケイ より:

    Subのアニメーション処理が終わったら、dipatchEventで適当なイベントを発行してあげたほうが一般的かなとは思います。

    なかわけさんの書き方だと場合によってスコープがややこしいことになる気がします。
    もしこの方法をとるのであれば、callbackを呼ぶときに
    callback(hoge)
    とやるのではなくて、
    callback.call(thisObj, hoge)
    などと、明示的にthisがなんであるかを指定した上で実行するなどした方が混乱が無くてよいかなと思います。

  2. なかわけ より:

    エスケイさん、コメントありがとう。

    書いててこういうことできるんだなーと思いながら、やっぱりエスケイさんの言うようにスコープがわかりにくいことに気がついたよ。

    時間があるときに書き直します。

Leave a Reply

*