美文网首页
「JavaScript学习笔记」AOP(面向切面程序)

「JavaScript学习笔记」AOP(面向切面程序)

作者: 这名字真不对 | 来源:发表于2018-09-11 11:34 被阅读0次

AOP(面向切面程序)

把一些和核心业务逻辑无关的功能抽离出来,通过动态植入的方式参入业务逻辑模块当中。
一般无关的功能包括:日志统计、安全控制、异常处理

动态植入函数

思路是包装原函数,返回一个函数,带上需要注入的函数,需要注意this的指向

Function.prototype.before = function (beforeFn) {
  var self = this 
  // 原函数调用原型方法,使得self 指向原函数,这里主要是用于保存一个原函数的指向
  // 如果通过其他方式实现的话,可以使用其他方式保存原函数
  
  return function () {
    beforeFn.apply(this, arguments) 
    // beforeFn就是要注入的函数,这里的this arguments是注入后,调用时获取的this
    
    return self.apply(this, arguments)
    // 原函数执行, this指向注入后返回函数的执行时的this,返回结果
  }
}


Function.prototype.after=function(afterFn){
    var self=this  
    return function(){ 
        var ret=self.apply(this, arguments)
        afterFn.apply(this, arguments) 
        return ret
    }
}
// 基本逻辑与前面相同,只是执行顺序是先执行原函数,再执行注入的函数

// 调用

var fn = function () {
  console.log('fn do something')
}
fn = fn.before(function () {
  console.log('before')
}).after(function () {
  console.log('after')
})

fn() 
// 'before'
// 'fn do something'
// 'after'


// 不用原型实现
var injectBefore = function (originalFn, beforeFn) {
  return function () {
    beforeFn.apply(this, arguments) 
    return originalFn.apply(this, arguments)
  }
}

var injectAfter = function (originalFn, afterFn) {
  return function () {
    var ret = originalFn.apply(this, arguments)
    afterFn.apply(this, arguments) 
    return ret
  }
}

参考: https://juejin.im/post/59be38a2f265da0660296eeb

相关文章

  • 「JavaScript学习笔记」AOP(面向切面程序)

    AOP(面向切面程序) 把一些和核心业务逻辑无关的功能抽离出来,通过动态植入的方式参入业务逻辑模块当中。一般无关的...

  • spring框架02

    1 AOP面向切面编程 1.1 什么是AOP AOP意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能...

  • 来自于宏的黑魔法 --- 简单实现面向切面编程

    Elixir Macro AOP 面向切面 宏 元编程 什么是 AOP (面向切面编程)? 面向切面编程 AOP(...

  • 面向切面的程序设计(AOP)

    面向切面的程序设计(AOP) Spring 框架的一个关键组件是面向切面的程序设计(AOP)框架。一个程序中跨越多...

  • Spring面试题和答案<4>

    Spring面向切面编程(AOP) 51. 解释AOP 面向切面的编程,或AOP, 是一种编程技术,允许程序模块化...

  • spring aop面试题

    Spring面向切面编程(AOP)1 解释AOP面向切面的编程,或AOP, 是一种编程技术,允许程序模块化横向切割...

  • Spring_13_Spring框架的AOP

    Spring 框架的 AOP Spring框架的一个关键组件是面向切面编程(AOP)框架,面向切面的编程需要把程序...

  • Android之AOP面向切面编程

    这篇博客只是本人在Android进阶学习中AOP面向切面编程的学习笔记,适合入门级选手,如果想深入了解AOP面向切...

  • AOP

    AOP切面编程 AOP: Aspect Oriented Programming 面向切面编程 面向切面编程(也叫...

  • Spring源码分析之AOP

    AOP是什么 面向切面的程序设计(Aspect-oriented programming,AOP,又译作面向方面的...

网友评论

      本文标题:「JavaScript学习笔记」AOP(面向切面程序)

      本文链接:https://www.haomeiwen.com/subject/xhaygftx.html