javascript 實現參數重載

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);
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章