AOP: 面向切片编程,在不改变代码原有逻辑的情况下,增加一些额外的功能.
下面例子中核心代码都在fn中,但是想在执行fn前后做一些操作
Function.prototype.before = function(beforeFn) {
return () => {
beforeFn();
this();
}
}
Function.prototype.after = function(afterFn) {
return () => {
this(); // this指向的不是原来的fn,而是before方法返回的匿名函数,包括了注入的beforeFn和原始的fn
afterFn();
}
}
function fn(){
console.log('fn');
}
let newFn = fn.before(() => {
console.log('before');
}) // 执行到这里,返回结果是before里面返回的匿名函数(不再是原来的fn),匿名函数也是可以调用after方法
.after(() => {
console.log('after');
});
let rs = newFn();
// 打印结果
//before
//fn
//after
网友评论