javascript的代理和切面

Java里有面向切面的实现方式,可以监控包、对象、函数等的行为,以及动态修改函数的参数和返回值等。

那么在JavaScript里是否有对应实现?在用到对一个函数进行切面时,如何监控函数的参数
和执行过程,以及修改函数的执行方式。

在用jasmine对代码进行测试时,jasmine使用了一个很优雅的方式,使用spyOn对函数进行监控。虽然没有看过jasmine的源代码,但时,spyOn函数修改了函数的默认行为。受此启发,JavaScript里是可以实现切面操作的。

实现方式:


/**
* 原函数
* @param {type} val
* @returns {Number}
*/

function fun(val){
return val+1;
}


/**
* 注册前置函数
* @returns {undefined}
*/
function before(){
var f = fun;
window.fun = function(val){
//修改参数
val = val+2;

//执行原函数
return f(val);
};
}

//注册
before();

//执行
var rst = fun(1);


console.log(rst);






结果输出:4



实际在应用中,我们可以将代理和切面功能完善一下,给出一个完善的方法,如

/**
*
* @param {type} fun 原函数
* @param {type} obj fun所属的对象
* @param {type} before 前置函数
* @param {type} after 后置函数
*/


function proxy(fun,obj,before,after)

来完成代理和切面。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值