美文网首页
JavaScript面向切面编程

JavaScript面向切面编程

作者: check_ping | 来源:发表于2017-05-07 01:20 被阅读0次
    定义

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

    应用场景

    当一个函数内部的一段代码功能,在很多函数中都将被调用,我们的第一反应是将这块功能代码提取出来,再次封装调用,例如:

    function test1(){
      console.log('这是大家都要执行的代码');
      console.log('这是test1要执行的代码');
    }
    function test2(){
      console.log('这是大家都要执行的代码');
      console.log('这是test2要执行的代码');
    }
    

    提取之后:

    fucntion common(){
      console.log('这是大家都要执行的代码');
    }
    function test1(){
      common();
      console.log('这是test1要执行的代码');
    }
    function test2(){
      common()
      console.log('这是test2要执行的代码');
    }
    

    这种做法,相信大部分人在工作中都会这样做,但是为了保持一个函数的单一性(这里test1和test2的功能其实在加入了common这个函数的功能),所以我们要想办法将common函数的代码在test1函数调用之前来调用,那么我们可以这样做:

    function test1(){
      console.log('这是test1要执行的代码');
    }
    function test2(){
      console.log('这是test2要执行的代码');
    }
    Function.prototype.before = function(fn){
      var _this = this;
      return function(){
        fn.apply(this,arguments);
        return _this.apply(this,arguments);
      }
    }
    test1.before(function(){
      console.log("这是大家都要执行的代码");
    })();
    test2.before(function(){
      console.log("这是大家都要执行的代码");
    })();
    

    通过这样的一个方法,就将函数的功能代码保持了单一性。

    关于面向切面编程的理解,还是有所欠缺,希望理解透彻的老司机多来指点指点。

    附上以前老司机对我提过的一个问题答案:
    如何改写comsole.log方法,在控制台直接打印json字符串,就不用每次点开对象的属性去看了

    var _old = console.log;
    console.log = function(){
        var args = [].prototype.slice.call(arguments);
        for(let i = 0; i < args.length; i++){
            args[i] = JSON.stringify(args[i], null, 2);
        }
        _old.apply(this, args);
    }
    var val = {
        a: 1,
        b: 2
    }
    console.log(val);
    
    控制台直接打印字符串

    相关文章

      网友评论

          本文标题:JavaScript面向切面编程

          本文链接:https://www.haomeiwen.com/subject/pfaytxtx.html