假设我已经有一个按钮,并通过jQuery为其附加了一个点击事件:
var $button = $('#test').click(function () { console.log('original function') });
现在,假设我想要覆盖这个点击事件,以便在函数之前和之后添加一些逻辑。我尝试使用以下函数进行绑定和包装。
Function.prototype.bind = function () {
var fn = this;
var args = Array.prototype.slice.call(arguments);
var object = args.shift();
return function () {
return fn.apply(object, args.concat(Array.prototype.slice.call(arguments)));
}
}
function wrap(object, method, wrapper) {
var fn = object[method];
return object[method] = function() {
return wrapper.apply(this, [fn.bind(this)].concat(
Array.prototype.slice.call(arguments)));
}
}
所以,我使用该方法所在对象、该方法和我想要执行的匿名函数来调用wrap函数。我的想法是:
wrap($button 'click', function (click) {
console.log('do stuff before original function');
click();
console.log('do stuff after original function');
});
这只是调用原始函数。我之前曾成功地在对象的方法上使用过这种方法。类似于:查看这个 Plunker
请问有人可以帮我在我的具体示例中实现这个吗?
谢谢
.off()
解除绑定,然后传入你的新函数呢?比如$('whatever').off().click(newFunc)
?... 嗯,重新阅读了一下问题,不确定我最初的评论是否能够给你想要的答案? - ann0nC0d3r