码迷,mamicode.com
首页 > 其他好文 > 详细

高阶函数实现AOP

时间:2017-07-23 12:45:54      阅读:140      评论:0      收藏:0      [点我收藏+]

标签:业务   统计   rip   self   模块   for   逻辑模块   保存   java   

      AOP(面向切面程序)的主要作用是把一些跟核心业务逻辑模块无关的功能抽离出来,这些跟业务逻辑无关的功能通常包括日至统计、安全控制、异常处理等。把这些功能抽离出来之后,再通过“动态织入”的方式掺入业务逻辑模块中。这样做的好处首先是可以保证业务逻辑模块的纯洁和高内聚性,其次是可以很方便的复用日志统计模块。在JavaScript中实现AOP,都是只把一个函数“动态织入”到另一个函数之中,具体实现技术很多,现在用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);//执行原函数
        afterfn.apply(this,arguments);//执行新函数,修正this
        return ret;
    }
}

var fn=function(){
    console.log("fn");
}
fn=fn.before(function(){
    console.log("before");
}).after(function(){
    console.log("after");
});

fn();

 

高阶函数实现AOP

标签:业务   统计   rip   self   模块   for   逻辑模块   保存   java   

原文地址:http://www.cnblogs.com/xiaoxiaokun/p/7224016.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!