由于项目中的接口调用比较繁琐,想用JS对其进行封装,但封装过程中遇到一个问题:不同场景下需要传入的参数不同,当不需要该参数时不能传入接口,也就是如下情况:
当我传入参数时,在params里传这些键值对:
$.html.post("user","articleDetailAction",url,0}); function(target,action,url,position){ var json={ routerAction : "ydLocalAction", target : target, action : action, params : { photos : url, position : position } } dialHybrid.callNative("YDLocalRouter","Action",json, CALLBACK_NORMAL,function(responseJson){ return responseJson; }); }
当我没传入参数时,则不传params
$.html.post("user","articleDetailAction"); function(target,action){ var json = { target : target, action : action, } dialHybrid.callNative("YDLocalRouter","Action",json, CALLBACK_NORMAL,function(responseJson){ return responseJson; }) }
在这里不知道封装的function里面该如何去传参,还望有大神来指点一下
因为其他地方有可能需要用到的接口中,target,action,params这些参数都用不到,形如:
function(title,callBackFunc){ var nabBar_json={ title : title, leftText : "返回", rightText : "搜索" } dialHybrid.callNative("YDLocalRouter", "Action", navBar_json, CALLBACK_GLOBAL, function(responseJson) { if(typeof(callBackFunc) === "function"){ callBackFunc(responseJson); } }); }
那么我在定义方法的时候,是不是所有参数都需要手动传入呢?
比如:
$.html.nabBar({title:title,leftText:"返回",rightText:"搜 索"},function(responseJson){return responseJson;})
如果是这样的话我的function中该如何把这些参数放入navBar_json中呢?
$.html={ "navBar" : function(){ var navBar_json = {} for(var i=0;i
这样写对吗?
你应该把params当成参数传进来;
如果你一定要按你现在这样,可以这样写:
params : (url||position ? {photos : url?url:'',position : position?position:''} : {})
这样子你就想怎么传值都行了
你直接利用arguments
来判断传入的实参的个数就好了
if(arguments.length>2){
//传入了params参数
}else{
//没有传入了params参数
}
params 直接作为方法参数不就行了。
我简单说一下我的思路吧。。。
对于用var一个json接受参数的,我一般习惯将json作为参数。虽然要多写一些键名,但是参数一多,json的好处就显现出来了:参数不会乱
function fn(json){
dialHybrid.callNative("YDLocalRouter","Action",json,
CALLBACK_NORMAL,function(responseJson){
return responseJson;
})
}
fn({
routerAction : "ydLocalAction",
target : 'target',
action : 'action',
params : {
photos : 'url',
position : 'position'
}
});
对于这种,一般在一些文档里面会这样写:fn(a,[option,callback)
这样,这里的option表示可写可不写的。这种情况就要按照楼上说的,用arguments+if去判断
function fn(target,action){
var json={
target : target,
action : action,
params : {}
};
if(arguments[2]&&arguments[3]){
json.routerAction = "ydLocalAction";
json.params = {
photos : arguments[2],
position : arguments[3]
}
}
/*code to do other things*/
}
/*一般来说,那些文档里面的写法往往还会判断一下该参数的类型是什么,针对不同类型的参数执行不同的代码,但原理还是一样的*/
||
赋予默认值貌似这个不适合你这种场景,不过这个常出现在一些动画函数的封装中:
function fn(x){
var moveX=x||0
/*other code*/
}