1、AOP:主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来,这些跟业务逻辑无关的功能通常包括日志统计、安全控制、异常处理等。把这些功能抽离出来之后,再通过“动态织入”的方式参入业务逻辑模块中。
2、AOP好处
- 保证业务逻辑模块的纯净和高内聚性
- 方便复用日志统计等功能模块
3、JS实现AOP思路:把一个函数“动态织入”到另一个函数之中。我们使用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); //【不要直接写在return中】
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(); //1 2 3
把负责打印1和打印3的两个函数通过AOP方式动态插入func函数。通过执行上述函数,控制台一次输出1 2 3。