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);
posted on 2023-10-31 22:43  自由港  阅读(33)  评论(0编辑  收藏  举报