在方法中同时接收对象和字符串两种数据类型的入参

50 阅读1分钟

在函数中兼容两种入参

原因

在改造封装请求报文的方法中,原来是使用字符串的形式传参而且入参比较多,在我改造请求报文的方法中在原有的参数基础上有新增了几个参数,如果改变入参,那么在后面报文封装方法的使用中,每次都要写超过10多个的入参,我实在是不能接受,就把入参改成对象的形式,但是原有的封装的方法也有很多系统在用,所以新的入参方式需要兼容两种入参

// 原来的入参
export function getMsg(version,msg,type,body,ext,receiver,channel,func,code,dsptch,grp,access){
  ...
};
//原有的方法使用
getMsg(version,msg,type,body,ext,receiver,channel,func,code,dsptch,grp,access);
//改造之后的方法
export function getMsg(...arg){
//处理不同方式的入参
const [version,msg,type,body,ext,receiver,channel,func,code,dsptch,grp,access]=strToObj(arg)
  ...
};
let arg={
    version:"version",
    msg:"msg",
    type:"type",
    body:"body",
    ext:"ext",
    receiver:"receiver",
    channel:"channel",
    func:"func",
    code:"code",
    dsptch:"dsptch",
    grp:"grp",
    access:"access"
}
getMsg(arg);
//解析不同的传参
function strToObj(arg){
    let newArg;
    if(typeof arg[0]==="object"){
        let [{version,msg,type,body,ext,receiver,channel,func,code,dsptch,grp,access}]=[arg[0]]
        newArg=[version,msg,type,body,ext,receiver,channel,func,code,dsptch,grp,access]
    }else if(typeof arg[0]==="string"){
    }
}

优势

在优化之后的入参方式更有可读性,入参也更加直观,要是只有几个参数有值不需要和原来一样把所有入参都写上

//原来的函数方法调用
getMsg(version,"","","","","","","","","","",access);
//优化之后的函数调用
let arg={
    version:"version",
    access:"access"
}
getMsg(arg);