Javascript 中的 AOP

来源:互联网 发布:matlab定义二维数组 编辑:程序博客网 时间:2024/05/20 20:48

AOP(Aspect Oriented Programming) 意为面向切面编程,利用AOP可以对业务逻辑各个部分进行隔离,从而使得业务逻辑各部分的耦合度降低,提高程序的可重用性。

主要功能

日志记录,性能统计,安全控制,事务处理,异常处理等等

主要意图

将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。

以上内容来自百度百科…

在JavaScript中的应用

JavaScript 中函数作为第一公民,有很多用法微妙的用法,实现AOP也很简单。我们可以把函数当成参数传递到另外一个函数中。

Function.prototype.after = function (action) {
var func = this;
return function () {
var result = func.apply(this, arguments);
action.apply(this,arguments);
return result;
};
};

Function.prototype.before = function (action) {
var func = this;
return function () {
action.apply(this,arguments);
return func.apply(this, arguments);
};
};

拿 before 来解释下,首先保留一个 this (原函数)的引用,然后返回一个包含原函数和新函数的‘新函数’,在这个’新函数’里面,我们按照需求把两个函数执行一遍,并返回原函数执行的结果,保证 this 不被劫持。

由于我们是在Function.prototype上进行扩展,所以所有的Function都可以使用这样的方法。

var foo = function() {
console.log(2);
}

foo = foo.before(function() {
console.log(1);
}).after(function() {
console.log(3);
});

foo();

执行结果就是1,2 ,3

这种做法很妙,我们可以把与核心业务逻辑模块无关的功能抽离出来,然后在不修改源代码的情况下给程序动态地添加功能。

var foo = function(){
// 成千上万行代码
bar();
// 成千上万行代码
};

=>

var foo = (function(){
// 成两千上万行代码
}).after(function() {
bar();
});

改写过后会让我们的业务逻辑模块更加纯净。

推荐阅读

  • AllyTeam - 用AOP改善javascript代码
  • 《JavaScript设计模式与开发实践》

如需转载,请注明出处: http://w3ctrain.com/2016/02/22/aop-in-javascript/ ,欢迎加入前端Q群( 467969149 )

1 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 c1驾照分扣完了怎么办 驾照扣完12分后怎么办 驾照扣了60多分怎么办 驾照被扣了12分怎么办? c1驾照记满12分怎么办 不交钱不让验房怎么办 中考考号忘了怎么办 高考考生号忘了怎么办 1岁宝宝吞了硬币怎么办 小孩吞了5角硬币怎么办 10小孩吞了硬币怎么办 小孩吞了5毛硬币怎么办 小孩把硬币吞了怎么办 高三数学成绩差怎么办 没交社保的工龄怎么办 购置税证明丢了怎么办 车登记证书丢了怎么办 车辆登记书丢了怎么办 车贷分期还完了怎么办 住宅70年到期后怎么办 在外地扣了12分怎么办 英语6级证书丢了怎么办 孩子腺样体肥大鼻子堵塞怎么办 孩子初中成绩太差怎么办 交违章罚单丢了怎么办 违章缴费单丢了,怎么办 违章处理单掉了怎么办 驾驶证被扣9分后怎么办 车子违章扣50分怎么办 车子扣了12分怎么办 大学把档案丢了怎么办 学校把档案丢了怎么办 高考考了200多分怎么办 高考报名号忘了怎么办 中考只考500分怎么办 档案自提了之后怎么办 冬天衣服上的毛怎么办 四维预约不上怎么办 交了订金后悔了怎么办 信而富认证失败怎么办 南京市民卡坏了怎么办