加强自定义事件处理程序 - 删除对'event'参数的需求

时间:2011-08-12 13:44:52

标签: javascript jquery

我正在构建一些会触发自定义事件的对象,而我正在使用jQuery的bind和触发器来管理这个,就像这样:

function MyObject() {

    var _this = this;

    this.onUpdate = function(fn) {
        $(_this).bind('MyObject.update', fn);
    };

    this.update = function(params) {
        //Do stuff...
        $(_this).trigger('MyObject.update', [updatedID]);
    };

}

我的问题是当我用onUpdate注册其他回调函数时 - 我传入的函数需要包含'event'参数,以使触发器正常工作,如下所示:

function myCallback(event, updatedID) {
    //Do more stuff...
}

var myobject = new MyObject();
myobject.onUpdate(myCallback);

有没有一种很好的方法可以将我传入的函数包装在onUpdate方法中,以便myCallback不需要'event'参数,因为它似乎与我的目的有点无关?

1 个答案:

答案 0 :(得分:1)

您可以使用apply [MDN]

this.onUpdate = function(fn) {
    $(_this).bind('MyObject.update', function() {
        var params = [].slice.call(arguments, 1); // remove first argument
        fn.apply(this, params);
    });
};

OT:您应该扩展函数原型,而不是将函数添加到每个实例:

MyObject.prototype.onUpdate = function(fn) {...};
MyObject.prototype.update = function(params) {...};

这样,所有实例都共享这些功能。

在这方面值得阅读的文章: