《高级前端3.5》JavaScript面向切面编程——AOP(未完)

Aspect Oriented Programming(AOP),面向切面编程,是一个比较热门的话题。AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。

我们可以用JavaScript来实现面向切面,可以方便我们对代码进行无侵入式的开发。如统计某个函数的执行时间。 

 

先来看一个小例子:

//你要统计一下当前的所有的函数谁耗时最长
function test(){
    var start = new Date();
    console.log("hehe");
    var end = new Date();
    console.log(end-start);
}
test();

上面这个例子我们直接往函数内部添加了新的代码,当js中的逻辑特别多特别复杂的时候,这样就非常难看,而且万一和人家申明的变量一样,还污染了别人的代码。

由此引出下面的办法:

 1 //你要统计一下当前的所有的函数谁耗时最长
 2 function test(){
 3     console.log(2);
 4 }
 5 Function.prototype.before = function(fn){
 6     var __self = this;
 7     return function(){
 8         //this指向了调用的函数window
 9         //console.log(this);
10         fn.apply(this, arguments);    //1
11         __self.apply(__self, arguments);    //2
12     }
13     
14 };
15 Function.prototype.after = function(fn){
16     //after 限制性本身this 再执行回调
17     var __self = this;
18     return function(){
19         __self.apply(__self, arguments);
20         fn.apply(this, arguments);
21     }
22     
23 };
24 //默认函数被执行2遍 test作为中专
25 //before回调和before一起送到after去
26 //after和test一起送到before去
27 //挂在 self=>test 执行before回调 执行Self after自己执行回调
28 test.before(function(){
29     console.log(1);
30 }).after(function(){
31     console.log(3);
32 })();
33 
34 test.after(function(){
35     console.log(3);
36 }).before(function(){
37     console.log(1);
38 })();

 

 

再进一步延伸:

...

 

面向切面编程是进入高级前端工程师必须的一个基本技能。

这样不会导致在项目中乱插点而弄乱项目。

posted @ 2016-02-18 17:19  暖风叔叔  阅读(253)  评论(0)    收藏  举报