1.概要
在java中,同一个函数签名,比如 getUser,我们可以根据参数的不同,调用不同功能的方法。这也就是参数重载,如何在javascript也实现参数重载呢?
2.实现方法
function createOverload(){
const callMap=new Map();
function overload(...args){
const key=args.map(arg=>typeof arg).join(",");
console.info("参数类型:",key);
const fn=callMap.get(key);
console.dir(this);
debugger;
if(fn){
return fn.apply(this,args);
}
throw new Error("no match method");
}
/**
* 添加参数类型和处理函数
*/
overload.addImpl=function(...args){
const fn=args.pop();
if(typeof fn !=='function'){
return;
}
const types=args;
callMap.set(types.join(","),fn);
}
return overload;
}
const getUsers=createOverload();
// 添加无参数实现
getUsers.addImpl(()=>{
console.log("查询所有用户");
});
//添加只有一个string 的参数方法
getUsers.addImpl("string",(name)=>{
console.log(`根据姓名[${name}]查询用户`);
});
//添加 一个 string, number 参数方法
getUsers.addImpl("string","number",(name,age)=>{
console.log(`根据姓名[${name}]查询用户${age}岁`);
});
getUsers()
getUsers("老王")
getUsers("老王",30);