首页 > 其他分享 >js简单实现函数重载

js简单实现函数重载

时间:2024-03-29 23:58:35浏览次数:28  
标签:addImpl const 函数 js overloadFn 参数 重载

再学一点就爆炸

函数重载

在前端开发中,JavaScript 并不支持像其他语言(如 C++ 或 Java)中那样的函数重载,其中可以根据参数的不同来调用不同的函数。在 JavaScript 中,函数名是唯一的标识符,而不是函数签名。因此,定义具有相同名称但不同参数数量或类型的多个函数将会覆盖前面的定义。

但是,你可以通过一些技巧来模拟函数重载的行为,比如使用条件语句或默认参数来处理不同情况。
那如何使用js代码模拟实现函数重载呢

具体实现:

封装

function createOverload(){
	// 用于存储不同参数的函数
	const callMap = new Map()
	// 
	function overload(...agrs){
		// 获取参数类型,用 , 拼接
		const types = args.map(k=>typeof k).join(',')
		// 判断callMap中是否存在该类型组成的键
		if (callMap.has(types)) {
			return callMap.get(types).apply(this, args)
		}
		// 找不到则抛出错误
		throw 
	}
	overload.addImpl = function(...agrs){
		// 获取重载需要执行的回调
		const fn = args.pop()
		// 判断是否存在
		if(typeof fn !== 'function' || !fn){
			return;
		}
		const types = agrs.join(',')
		callMap.set(types,fn)
	}
}

声明

const getUser = new createOverLoad()
overloadFn.addImpl(() => {
  console.log('无参数情况')
})
overloadFn.addImpl('number', () => {
  console.log('一个数字参数情况')
})
overloadFn.addImpl('number', 'number', () => {
  console.log('两个数字参数情况')
})
overloadFn.addImpl('string', () => {
  console.log('一个字符串参数情况')
})

测试

overloadFn()
overloadFn(1)
overloadFn(1, 2)
overloadFn('hello')
overloadFn('hello', '1')

结果

在这里插入图片描述
成功!
在这里插入图片描述

总的来说,尽管 JavaScript 本身不支持函数重载,但通过一些模拟的技巧,可以实现类似的效果,提高前端开发中代码的可读性、可维护性和健壮性,同时也有助于提高开发效率。

标签:addImpl,const,函数,js,overloadFn,参数,重载
From: https://blog.csdn.net/qq_48018255/article/details/137125905

相关文章

  • CTF题型 nodejs(1) 命令执行绕过&典型例题
    CTF题型nodejs(1)命令执行绕过文章目录CTF题型nodejs(1)命令执行绕过一.nodejs中的命令执行二.nodejs中的命令绕过1.编码绕过2.拼接绕过3.模板字符串4.Obejct.keys5.反射6.过滤中括号的情况典型例题1.[GFCTF2021]ez_calc2.[西湖论剑2022]NodeMagicalLogin......
  • Python之def函数
    注:函数的内容称为函数体,函数体是多条python语句组成的简单的一个print函数In[25]:defmyfunc():...:foriinrange(3):...:print("煤煤是小乖猫")...:#效果In[26]:myfunc()煤煤是小乖猫煤煤是小乖猫煤煤是小乖猫传入参数In[27]......
  • 函数方程思想
    高中数学热门技巧——方程思想定点在曲线问题例题1题目已知椭圆方程\(\dfrac{x^2}{4}+y^2=1\),设直线\(l\),不经过点\(P(0,1)\)且与椭圆相交于\(A,B\)两点,若直线\(PA\)与直线\(PB\)的斜率和为\(-1\),证明:直线\(l\)过定点。题解由直线\(l\)不过点\(P(0,1)\)......
  • 第11章 使用类——运算符重载(一)一个简单的运算符重载示例(Time类对象的加法)
    本文章是作者根据史蒂芬·普拉达所著的《C++PrimerPlus》而整理出的读书笔记,如果您在浏览过程中发现了什么错误,烦请告知。另外,此书由浅入深,非常适合有C语言基础的人学习,感兴趣的朋友可以自行阅读此书籍。运算符重载我们先了解下函数重载的概念,函数重载,也叫函数多态,指的是用......
  • CTF题型 nodejs(2) Js沙盒vm&vm2逃逸原理总结&典型例题
    CTF题型nodejs(2)Js沙盒逃逸原理&典型例题文章目录CTF题型nodejs(2)Js沙盒逃逸原理&典型例题一.vm原理以及逃逸1.基本用法2.如何逃逸汇总1)this为对象2)this为null(Object.create(null))a.可用输出直接触发toString方法b.调用属性触发3)Object.create(null)+沙箱......
  • 代数:方程与函数
    方程与函数概述零点存在性定理如果函数\(f(x)\)在\([a,b]\)上连续,且\(f(a)\cdotf(b)<0\),则\(\existx_0\in[a,b]\),使\(f(x_0)=0\)。一元一次方程和一次函数形如\(ax+b=0(a\ne0)\)的方程称为一元一次方程。形如\(y=kx+b(k\ne0)\)的函数称......
  • 数论:数论函数
    数论函数积性函数积性函数:对于任何互质的整数有\(f(a\cdotb)=f(a)\cdotf(b)\)的数论函数。完全积性函数:对于任何整数有\(f(a\cdotb)=f(a)\cdotf(b)\)的数论函数。常见积性函数:欧拉函数\(\varphi\),莫比乌斯函数\(\mu\),因数个数函数\(\tau\),因数和函数\(\si......
  • python中函数与递归的练习
    求一个十进制的数值的二进制的0、1的个数实现一个用户管理系统(要求使用容器保存数据)[{name:xxx,pass:xxx,……},{},{}]users=[]#用户类,包含基本信息classUser:def__init__(self,name,password,email=None):self.name=nameself.p......
  • 使用函数指针实现转移表
    用函数指针实现简单的计算器功能。使用函数指针模拟实现计算器的功能大大减少了代码量,只需要创建一个函数指针数组,zi’azia其中存放着四钟加减乘除的算法。代码如下#include<stdio.h>intadd(inta,intb){ returna+b;}intsub(inta,intb){ returna-b;......
  • 新写一个jsp项目之二:连接mysql数据库
    下载mysql-installer-community-5.7.44.0。jdbc驱动要是用8.3版本。mysql-connector-j-8.3.0参考菜鸟教程,将jdbc放入tomcat的lib文件夹。 写一个验证程序。 <%@pagelanguage="java"import="java.util.*,java.sql.DriverManager"pageEncoding="utf-8"%><%......