Function.prototype.before = function (beforefn) {
var _self = this; //保存原函数引用 例如这里指向的是func
return function () { //返回包含了原函数和新函数的"代理函数"
beforefn.apply(_self, arguments); //执行新函数,修正this 原来this指向的是window
//执行原函数
return _self.apply(_self, arguments); // 使用arguments传参, 使用apply比较方便调用
}
};
Function.prototype.after = function (afterfn) {
var _self = this;
return function () {
var ret = _self.apply(_self, arguments);
afterfn.apply(_self, arguments);
return ret;
}
};
var func = function (...arguments) {
console.log('2', arguments);
}
func = func.before(function (...arguments) {
console.log("1", arguments);
}).after(function (...arguments) {
console.log("3", arguments);
})
func(1, 2, 3);
参考文章为this指向,防抖函数中的fn.apply(this,arguments)作用