面向工资的编程

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/Donspeng/article/details/78300271

遇到到了一个问题

有n个ajax请求,ajax[1],ajax[2],...,ajax[n],统计每个ajax请求的响应时间,要求:不修改源代码

第一次听到这个问题,就想到了在ajax请求里面修改,但是如果对于一个老旧的项目,其实就不太合理了。
那么最好的方式就是面向切面的编程,搞过java的同学应该对这个并不陌生。那么在js中怎么实现面向切面的编程呢?
首先定义两个函数before和after

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

上面定义的两个函数相当于对你要执行的函数before执行和after执行某个函数
那么回到最开始的问题,统计响应时间,获取后台数据使用getJson()

function getJson(){
    console.log('Request');
}
//不修改源代码的情况下统计响应时间
window.getJson=function (func){
    return func=(function(){
        var date;
        return func.before(function(){
            date=+new Date;     //也可以使用Date.now
        }).after(function(){
            console.log('timeout',+new Date-date);
        });
    })();
}(window.getJson);
输出:
    request  
    timeout 0

当然对于面试和应试来说最尴尬的事情莫过于
面试官:
应聘者:

参考文章链接:
1
2
3
4

猜你喜欢

转载自blog.csdn.net/Donspeng/article/details/78300271