JS面向切面编程AOP
什么是AOP?
AOP(面向切面编程)的主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来,这些跟业务逻辑无关的功能通常包括日志统计、安全控制、异常处理等。把这些功能抽离出来之后, 再通过“动态织入”的方式掺入业务逻辑模块中。
AOP能给我们带来什么好处?
AOP的好处首先是可以保持业务逻辑模块的纯净和高内聚性,其次是可以很方便地复用日志统计等功能模块。
JavaScript实现AOP的思路?
通常,在 JavaScript 中实现 AOP,都是指把一个函数“动态织入”到另外一个函数之中,具体的实现技术有很多,下面我用扩展 Function.prototype 来做到这一点。
主要就是两个函数,在Function的原型上加上before与after,作用就是字面的意思,在函数的前面或后面执行,相当于无侵入把一个函数插入到另一个函数的前面或后面,应用得当可以很好的实现代码的解耦,js中的代码实现如下:
//Aop构造器
function Aop(options){
this.options = options
}
//业务方法执行前钩子
Aop.prototype.before = function(cb){
cb.apply(this)
}
//业务方法执行后钩子
Aop.prototype.after = function(cb){
cb.apply(this)
}
//业务方法执行器
Aop.prototype.execute = function(beforeCb,runner,afterCb){
this.before(beforeCb)
runner.apply(this)
this.after(afterCb)
}
var aop = new Aop({
afterInfo:'执行后',
runnerInfo:'执行中',
beforeInfo:'执行前'
})
var beforeCb = function(){
console.log(this.options.beforeInfo)
}
var afterCb = function(){
console.log(this.options.afterInfo)
}
var runnerCb = function(){
console.log(this.options.runnerInfo)
}
aop.execute(beforeCb,runnerCb,afterCb)
广州品牌设计公司https://www.houdianzi.com PPT模板下载大全https://redbox.wode007.com
应用的一些例子:
- 为window.onload添加方法,防止window.onload被二次覆盖
- 无侵入统计某个函数的执行时间
- 表单校验
- 统计埋点
- 防止csrf攻击