装饰者模式(AOP方式来添加函数职责)

通常,在JavaScript中实现AOP(Aspect Oriented Programming,面向切面编程,通过预编译方式和运行期间动态代理实现程序功能的统一维护的一种技术。),都是指把一个函数“动态织入”到另一个函数中,具体实现方式有很多,以下是通过扩展Function.prototype来做到者点。

    Function.prototype.before = function( beforefn ) {
      var _self = this  // 保存原函数引用
      return function() { // 返回包含原函数和新函数的“代理”函数
        beforefn.apply( this, arguments ) // 执行新函数,修正this
        return _self.apply( this, arguments ) // 执行原函数
      }
    }

    Function.prototype.after = function( afterfn ) {
      var _self = this
      return function() {
        var ret = _self.apply( this, arguments )
        afterfn.apply( this, arguments )
        return ret
      }
    }

    var func = function() {
      console.log(2)
    }

    func = func.before(function() {
      console.log(1)
    }).after(function() {
      console.log(3)
    })

    func()

 func链式执行before和after,before函数里插入了打印数字1的方法,再连同func方法一起return给after函数执行,所以打印结果是1 2 3,我们把负责打印1和打印3的函数通过AOP的方式动态植入func函数。

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值