什么是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)
应用的一些例子:
AOP的概念,使用过Spring的人应该都不陌生了。Dojo中,也是支持AOP的。对于JavaScript的其他框架、库不知道有没有AOP的支持。而Aop又叫面向切面编程,用过spring的同学肯定对它非常熟悉,而在js中,AOP是一个被严重忽视的技术点,这次就来说说AOP在js中的妙用
动态的将代码切入到指定的方法、指定位置上的编程思想就是面向切面的编程。代码只有两种,一种是逻辑代码、另一种是非逻辑代码。
以前学习java的Spring框架时,这是个很强大的东西,用于实现调用者和被调用者之间的解耦。虽然在JS中也提供了call与apply动态改变调用者,但在复杂的UI组件中,这是远远不够了。
内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权或违规,请与小编联系!情况属实本人将予以删除!