1.概念
重载函数:函数同名,但是他们的参数类型,数量,顺序不同,完成的功能不同.由于js中没有重载函数,所以需要我们自己来实现.
2.代码
function createOverload{
const callmap = new Map() // 参数列表和对应函数实现的键值对集合
// 重载函数
function overload(...args){
const key = args.map(arg=> typeof arg).join(',') //[1, 'a'] => ['number','string']
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(!fn || typeof fn !== 'function'){
return
}
const types = args // 拿到参数列表
// 不同参数列表对应不同的函数实现
callmap.set(types.join(','), fn)
}
return overload
}
const getUsers = createOverload ()
getUsers.addImpl(()=>{
console.log('查询所有用户')
})
const searchPage = (page, size = 10) =>{
console.log('按照页码和数量查询用户')
}
getUsers.addImpl('number', searchPage)
getUsers.addImpl('number','number',searchPage)
getUsers.addImpl('string',(name)=>{
console.log('按照姓名用户')
})
getUsers.addImpl('string','string',(sex)=>{
console.log('按照性别用户')
})
getUsers() // 查询所有
getUsers(1) // 按照页码和数量查询用户
getUsers('a') // 按照姓名用户