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 回答