随笔 - 441  文章 - 4  评论 - 84  阅读 - 109万 

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   自由港  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
点击右上角即可分享
微信分享提示