function createOverload(){
var callMap=new Map();
function overload(...args){
const key=args.map((args)=>typeof args).join(',')//得到形如"string,number"的字符串
const fn =callMap.get(key)//获取之前注册过的函数
if(fn){
return fn.apply(this,args)
}
throw new Error('no matching function')
}
overload.addImpl=function(...args){
const fn=args.pop()
if(typeof fn !=='function'){
return
}
callMap.set(args.join(','),fn)
}
return overload
}
const getUsers=createOverload()
getUsers.addImpl(()=>{
console.log('======查询所有用户');
})
const searchPage=()=>{(page,size=10)=>{
console.log('页码和每页数量',page,size)
}}
//当有2个条件需要使用同一个函数,上方的size默认值才显得有意义
getUsers.addImpl('number',searchPage)
getUsers.addImpl('number','number',searchPage)
getUsers.addImpl('string',(name)=>{
console.log('======传入了一个字符串',name);
})
getUsers.addImpl('string','string',(name,name2)=>{
console.log('======传入了2个都是字符串',name,name2);
})
getUsers('a','b')