这是8月参加的一次深圳前端技术分享会,有个小伙伴分享了一个关于AOP的demo,回来又查了一些关于AOP的资料
function main() {//主函数
console.log('this is main');
}
function logBefore(arg_log) {
console.log('this is logBefore');
}
function logAfter(arg_log) {
console.log('this is logAfter');
}
Function.prototype.before = function (func) {
var vm = this;//指向在before之前调用的对象
console.log("before",vm);
return function () {//前置
func.apply(this);//先 /*apply(obj,args);用obj代替当前对象*/
vm.apply(this);//后
}
};
Function.prototype.after = function (func) {
var vm = this;//指向在after之前调用的对象
console.log("after",vm);
return function () {//后置
vm.apply(this);//先
func.apply(this);//后
}
};
testAOP = main.before(logBefore).after(logAfter);
testAOP();
Aspect Oriented Programming,
将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
在网上搜了一下,和AOP相关度比较高的是Spring,那么在web前端有AOP的用武之地吗?
比如说,在angular的项目中,我在每个控制器执行之前,都需要校验一把用户是否有执行权限 或者 token是否过期,如果没有权限或token已过期,就需要显示对应的提示或跳转到登录页面;目前的做法是在所有控制器上加一层父控制器,在父控制器里实现校验,那么,这里是不是就可以使用AOP来实现了呢?