JS实现前置和后置AOP

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)作用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值