ずいぶん前に自分のブログに書いた記事です。
Calbacksオブジェクト生成
var callback=$.Callbacks();
メソッドの追加と実行
function hello(){
console.log("Hello");
}
var callback=$.Callbacks();
callback.add(hello);
callback.fire();
実行結果
hello
このように関数をaddメソッドでcallbackオブジェクトに追加し、fireで実行するというのが基本的な使い方です。
fireは何回でも実行できます。
では、メソッドを複数追加するとどうなるでしょうか?
function hello(){
console.log("Hello");
}
function world(){
console.log("World");
}
var callback=$.Callbacks();
callback.add(hello);
callback.add(world);
callback.fire();
実行結果
Hello
World
追加したメソッドが両方実行されました。
メソッドに引数を渡したい場合はどうすればよいでしょうか?
追加したメソッドに引数を渡して実行する
function hello(message1,message2){
console.log(message1+message2);
}
var callback=$.Callbacks();
callback.add(hello);
callback.fireWith(window,["Hello","World"]);
実行結果
HelloWorld
このようにfireWithを使うと引数を渡して実行することができます。
第一引数にはコンテキスト(呼び出した関数のthisになる値)を指定します。ここではwindowオブジェクトを渡していますので、メソッドhello内でのthisは、windowオブジェクトを参照することになります。
第二引数には配列を渡します。これが指定した関数の引数になります。
Callbacksオブジェクトを無効にする
Callbacksオブジェクトを無効にするには、disableメソッドを使います
function hello(){
console.log("hello");
}
var callback=$.Callbacks();
callback.disable();
callback.add(hello);
callback.fire();
これを実行しても何も起こりません。エラーにもなりません。
disableした後でも、addやfireを実行してもエラーにはなりませんが、何も起こりません。
一度disableしたCallbacksオブジェクトを、再びアクティブにするメソッドはありません。
再度Callbacksオブジェクトを生成する必要があります。
メソッドの実行(を無効にする
メソッドの実行(fire,fireWith)を無効にするには、lockメソッドを使います
function hello(){
console.log("hello");
}
var callback=$.Callbacks();
callback.add(hello);
callback.fire();
callback.lock();
callback.fire();
実行結果
hello
lockを実行することで、lock後のfireが無効になっています。(lockしなければHelloが2回表示される)
別の記事で詳しく解説しますが、Callbacksオブジェクト生成時にmemory オプションを指定すると、lock後でもaddした関数は実行されます。
以上、基本的な使い方を説明しました。