面向工资的编程

本文探讨如何在JavaScript中实现面向切面编程,以解决在不改变原有代码的情况下统计后台响应时间和处理其他通用任务的问题。通过定义before和after函数,可以在目标函数执行前后插入额外的操作,提供了一种优雅的解决方案。
摘要由CSDN通过智能技术生成

遇到到了一个问题

有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

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值