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);