javascript – 是否有一种优雅的方法来重载插件内的jQuery方法?

我今天有点沉闷,我无法想到这个问题的优雅解决方案.

我继承了一个插件,我需要修改它以允许将启用或禁用状态传递给它,让它分离所有事件,显示禁用状态等.

就像一个jQuery UI插件,我只是想用…

$('div').myPlugin('disabled');

这个我没问题.

但是,该插件附加了许多不是namespaced的事件.我希望事件是命名空间,因此我可以轻松地删除事件.

有许多事件被绑定,所以我认为嘿,为什么我不重载bind()自动附加命名空间?

我想出了这个……

(function(oldBind) {
    $.fn.bind = function() {
        if (arguments.length >= 2) {
            arguments[0] += '.my-plugin';
        }
        return oldBind.apply(this, arguments);
    }
})($.fn.bind);  

我把它放在插件的顶部,然后返回this.each(fn)代码.

它似乎工作得很好.

但是,我扔进了console.log(arguments [1] .toString())并注意到(正如我所料)这覆盖了插件之外的主jQuery bind().

让这个重载的bind()仅对此插件可用的最佳方法是什么?

我应该简单地放在插件的末尾$.fn.bind = oldBind还是有更简单的方法?

最佳答案 只需保存之前的功能,然后再将其替换.

var oldBind = $.fn.bind;
$.fn.bind = ...what ever you wanted...
$.fn.bind = oldBind;

这应该是诀窍,它是未经测试的,所以如果它不起作用,请告诉我.

点赞