1
2

More than 5 years have passed since last update.

Callbacksの基本的な使い方1

Posted at

ずいぶん前に自分のブログに書いた記事です。

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した関数は実行されます。

以上、基本的な使い方を説明しました。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2