<强>简介强>
AOP(面向切面编程),缩写为面向方面的编程,意为:面向切面编程,通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术.AOP是OOP的延续,是软件开发中的一个热点,也是JAVA中Spring框架的一个重要内容,是函数式编程的一种衍生范型。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。
<强>主要功能强>
-
<李>日志记录李>
<李>性能统计李>
<李>安全控制李>
<李>事务处理李>
<李>异常处理等等。李>
<强>主要意图强>
将日志记录,性能统计,安全控制,事务处理,异常处理等代码从业务逻辑代码中划分出来,通过对这些行为的分离,我们希望可以将它们独立到非指导业务逻辑的方法中,进而改变这些行为的时候不影响业务逻辑的代码。
请慎重的在JS的中使用AOP !因为部分JS的方法是异步的只
,必要时使用ES7中的异步/等待/承诺,以保证代码的顺序执行。
js中aop的实现原理主要依靠函数的两个函数:应用和电话。
-
<李>申请函数李>
函数。应用(obj, args);
应用方法能劫持另外一个对象的方法,继承另外一个对象的属性
函数。应用(obj, args)方法能接收两个参数
obj:这个对象将代替函数类里这对象
参数:这个是数组,它将作为参数传给函数(参数→参数)
利用这个类()的参数数组化来提升程序的性能
示例:
函数dosomething (a, b, c) { 控制台。日志(“做点什么。”,a, b, c);//预期结果:做些什么。看到说运行 } 让一些=[“看”、“说”、“运行”); dosomething。应用(这);
调用函数
函数。调用(obj,参数,参数,…);1
示例:
函数dosomething (a, b, c) { 控制台。日志(“做点什么。”,a, b, c);//预期结果:做些什么。看到说运行 } dosomething。调用(“看”,“说”,“运行”);
,推荐:使用申请函数打电话给函数和申请函数的效果是一样,但是调用函数的参数不够灵活,在写法上参数无法灵活伸缩;申请函数,只需要把参数放到数组里即可苹果比调用函数更适合在项目实际开发中使用,并且应用比电话的性能要好。
从事过Java Web开发的童鞋,一定用过春天框架,在春天的框架中有前(前置通知),后(后置通知),在(环绕通知)。
今天我们在JS中实现的这三种通知。
<强> 1。前(前置通知)强>
前函数,用来实现函数的前置通知。在目标函数的前面执行一些前置操作。
//AOP前置通知函数声明/* * *给方法加入前置切片函数 *可以在执行方法之前执行一些操作, *前置切片的返回值为假时,不影响原方法的执行 * @param func{函数}被前置执行的函数 * @return{函数}加入前置通知的函数 */Function.prototype。_before=函数(函数){ var __self=; 返回函数(){ 函数。应用(__self参数); __self返回。应用(__self参数); } }//代码 函数(){ 控制台。日志(“I \ ' m '); } 一个=a._before(函数(){ console.log(之前的); }); ();//结果://之前//我是
<强> 2。后(后置通知)强>
后函数,用来实现函数的后置通知。在目标函数的后面面执行一些后置操作。
//AOP后置通知函数声明/* * *给方法加入后置切片函数 *可以在执行方法之之后执行一些操作 *后置切片的返回值为假时,不影响原方法的执行 * @param func{函数}被后置执行的函数 * @return{函数}加入后置通知的函数 * @constructor */Function.prototype。_after=函数(函数){ var __self=; 返回函数(){ var ret=__self。应用(__self参数); 函数。应用(__self参数); 返回受潮湿腐烂; } }//代码 函数b () { 控制台。日志(“I \ ' m b "); } b=b._after(函数(){ console.log(后); }); b ();//结果://我是b//关于AOP在JS中的实现与应用详解