javascript - 定义函数时,如何实现有实参就传入键值对,没有就不传

 凌乱LW_502 发布于 2022-11-09 11:12

由于项目中的接口调用比较繁琐,想用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

这样写对吗?

4 个回答
  • 你应该把params当成参数传进来;

    如果你一定要按你现在这样,可以这样写:

    params : (url||position ? {photos : url?url:'',position : position?position:''} : {})

    这样子你就想怎么传值都行了

    2022-11-12 11:00 回答
  • 你直接利用arguments来判断传入的实参的个数就好了

    if(arguments.length>2){
        //传入了params参数
    }else{
        //没有传入了params参数
    }
    
    2022-11-12 11:00 回答
  • params 直接作为方法参数不就行了。

    2022-11-12 11:00 回答
  • 我简单说一下我的思路吧。。。

    json传参

    对于用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'
            }
        });

    参数不确定之if判断

    对于这种,一般在一些文档里面会这样写: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*/
        }
    
    2022-11-12 11:00 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有