0

こういうことをしたいです。

var foo = function() {
    this.run = function() {
        alert('got');
    }
    this.init = function() {
        this.run();
    }
    this.init();
};

window.onload = function() {
    var f = new foo();
    $(f).bind('run', function() { // this doesn't work
        alert('ran!');
    });
};​

しかし、それは機能しません。別のオブジェクトのメソッドをサブスクライブするにはどうすればよいですか?

4

1 に答える 1

7

イベントハンドラーを関数に直接バインドすることはできません。イベントにバインドします。run()でカスタムイベントをトリガーする必要があります。

this.run = function() {
    // Trigger an event called "run"
    $(this).triggerHandler('run');

    // ...
};

これで、すでに行った方法でこのイベントをサブスクライブできます。

var f = new foo();
$(f).on('run', function() { ... }); // "bind" is fine as well

これは、ハンドラーがバインドされた後にトリガーされたイベントに対して機能するため、コンストラクターでトリガーされたイベントはほとんどキャッチされません。

于 2012-06-07T21:52:23.930 に答える