dojo/aspect 模块的官方地址:
https://dojotoolkit.org/reference-guide/1.10/dojo/aspect.html#dojo-aspect
一、dojo/aspect介绍
dojo/aspect提供了面向切面编程的能力。我们可以利用他在已有的函数前,后执行自己的函数,或者阻止执行已有的函数。 dojo/aspect提供了after,before,around三个函数,三个函数的作用将在后续介绍。
1、after(target, methodName, advisingFunction, receiveArguments);函数
参数介绍:
1、target:目标对象;
2、methodName:目标对象的函数;
3、advisingFunction:自定义函数;
4、receiveArguments:advisingFunction函数
是否使用methodName函数的参数。
简单说明: receiveArguments为boolean值,如果为true,则advisingFunction函数的入参为methodName的参数。此函数作用:在目标函数执行之后执行自定义函数;advisingFunction的返回值将作为调用methodName的返回值,即after具有修改目标函数的能力。
一个例子:
define(["dojo/aspect"], function(aspect){
aspect.after(dojo, "xhr", function(deferred){
// 将会在 dojo.xhr 之后执行
});
// 执行dojo原生的函数
dojo.xhr("GET", {...});
});
2、before(target, methodName, advisingFunction)
参数介绍:
1、target:目标对象;
2、methodName:目标对象的函数;
3、advisingFunction:自定义函数
简单说明:
1、advisingFunction函数法接收的参数为methodName函数的参数;
2、advisingFunction方法可以有一个返回值,
该返回值将替换掉调用methodName(或者下一个before)时的参数,
即before有改methodName参数的能力。
3、advisingFunction的返回值需要是一个数组。
此函数的作用: 顾名思义,其主要作用是在目标函数执行之前执行自定义函数, 可以达到修改目标函数参数的作用。
一个例子:
define(["dojo/aspect"], function(aspect){
aspect.before(dojo, "xhr", function(method, args){//此参数为xhr的参数
//在xhr函数执行之前执行
if(method == "PUT"){
// 测试:修改一下入参
args.url += "?x-method=PUT";
// 返回新的参数将作为xhr的入参
return ["POST", args];
}
});
// 在上述函数执行之后执行
dojo.xhr("PUT", {...});
});
3、around(target, methodName, advisingFactory);
参数说明:
1、target:目标对象;
2、methodName:目标函数
3、advisingFactory:methodName方法执行前执行的方法
简单说明:
1、advisingFactory接收的参数为目标函数methodName。
2、advisingFactory必须返回一个函数,且函数参数为
目标函数methodName的参数;
3、advisingFactory返回的函数中可以对参数重新处理,
之后选择性的调用或者不调用目标methodName,
如果调用也可以处理methodName的返回值。
4、advisingFactory返回的函数的返回值作为
最开始调用methodName的返回值。
此函数的作用:around即可以修改methodName的参数又可以修改methodName返回的结果,且methodName不一定执行
一个例子:
define(["dojo/aspect"], function(aspect){
aspect.around(dojo, "xhr", function(originalXhr){
//around()在xhr函数执行之前执行,且入参为xhr函数
//必须有一个返回函数,且入参为xhr函数的入参
return function(method, args){
// 可以做一些原始函数调用之前得操作
//选择性调用原始函数xhr
var deferred = originalXhr(method, args);
//自己的业务逻辑.....
//此返回值将会作为xhr函数的返回值
return deferred;
}
});
dojo.xhr("PUT", {...});
});
参考:https://blog.csdn.net/lj15875569485/article/details/35573291
https://dojotoolkit.org/reference-guide/1.10/dojo/aspect.html#dojo-aspect
本站声明:网站内容来源于网络,如有侵权,请联系我们https://www.qiquanji.com,我们将及时处理。
微信扫码关注
更新实时通知