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)
来完成代理和切面。
相关推荐
nmgxzm00 2020-11-10
ifconfig 2020-10-14
hhanbj 2020-11-17
zfszhangyuan 2020-11-16
古叶峰 2020-11-16
一个智障 2020-11-15
jipengx 2020-11-12
81427005 2020-11-11
xixixi 2020-11-11
游走的豚鼠君 2020-11-10
苗疆三刀的随手记 2020-11-10
Web卓不凡 2020-11-03
小飞侠V 2020-11-02
帕尼尼 2020-10-30
爱读书的旅行者 2020-10-26
帕尼尼 2020-10-23
杏仁技术站 2020-10-23
淼寒儿 2020-10-22