您现在的位置是:亿华云 > IT科技类资讯
JS 中没有函数重载,又是如何实现函数重载的呢?
亿华云2025-10-09 03:16:40【IT科技类资讯】9人已围观
简介面试官问你 JS 是如何实现函数重载的?你会怎么回答?你会不会疑问我在书里看的明确讲 JS 是没有函数重载的,面试官说能实现,那肯定是有办法的呀,该如何实现呢?一、什么是函数重载?重载函数指的是两个或
面试官问你 JS 是中没载又载如何实现函数重载的?你会怎么回答?
你会不会疑问我在书里看的明确讲 JS 是没有函数重载的,面试官说能实现,有函那肯定是数重数重有办法的呀,该如何实现呢?何实
一、什么是现函函数重载?重载函数指的是两个或两个以上的同名函数,实现一个函数名有多种功能。中没载又载
函数重载要求编译器能够在调用函数时唯一确定,有函应该调用的数重数重是哪个函数?由于同名函数有多个,在确定函数实现时,何实需要根据函数的现函参数的云服务器提供商个数和类型来区分,即实现函数重载时,中没载又载要求同名函数的有函参数个数或类型不一致,否则将无法实现函数重载。数重数重
重载的何实特点:
同名的多个函数。不同的现函参数。二、JS中有函数重载吗?我在阅读《JavaScript 高级程序设计(第三版)》一书,在第五章看到明确的提示 JS 没有函数重载。
我们在 《JavaScript 高级程序设计(第三版)》 书中能看到,JS 中的同名函数,前面的会被最后面的函数覆盖掉,根本无法实现多种功能,如:
function add(a,b) {
return a+b
}
function add(a, b, c) {
return a + b + c
}
console.log(add(1,2)); // NaN
console.log(add(1,2,3 ));// 6
如果我们需要使用 JS 实现上述 add 方法,将两个或三个数值进行求和,免费信息发布网该怎么解决呢?
解决1:利用 arguments
function add() {
var reg = arguments;
if (reg.length == 2) {
return reg[0] + reg[1]
} else if(reg.length == 3) {
return reg[0] + reg[1] + reg[2]
}
}
console.log(add(1, 2)) //3
console.log(add(1, 2, 3)) //6
上述方法虽然实现了上述简单功能,勉强能算得上是一种函数重载的实现方法,但是存在一定的弊端。
它的缺点:
如果功能复杂时,代码量过大。不利于维护和复用。这时候问题来了,利用 JS 如何实现呢?可以通过闭包的形式可以简单地实现。
三、JS 如何实现重载?function addMethodToObject (obj, name, fn) {
const temp = obj[name]
obj[name] = function () {
if (fn.length === arguments.length) {
return fn.apply(obj, arguments)
} else if (typeof temp === function) {
return temp.apply(obj, arguments)
}
}
}
上述方法用来给一个对象添加自定义方法,能够接收三个参数:
需要添加方法的对象自定义方法名定义方法具体要实现的功能,通过回调实现addMethodToObject(group, find, function () {
return {
peoples: this.peoples,
count: this.peoples.length
}
})
addMethodToObject(group, find, function (isMale) {
if (!!isMale) {
const male = this.peoples.filter(item => item.sex === male)
return {
peoples: male,
count: male.length
}
} else {
const female = this.peoples.filter(item => item.sex === female)
return {
peoples: female,
count: female.length
}
}
})
addMethodToObject(group, find, function (elder, age) {
if (!!elder) {
const elder = this.peoples.filter(item => item.age >= age)
return {
peoples: elder,
count: elder.length
}
} else {
const younger = this.peoples.filter(item => item.age < age)
return {
peoples: younger,
count: younger.length
}
}
})
const group = {
total: 10,
male: 6,
female: 4,
peoples: [{
age: 12,
sex: male
}, {
age: 18,
sex: female
}]
}
group.find()
group.find(1)
group.find(0, 15)
总结:JS 没有函数重载,但是可以实现函数重载。
源码下载很赞哦!(24225)
相关文章
- 前面这两个步骤都是在本机完成的。到这里还没有涉及真正的域名解析服务器,如果在本机中仍然无法完成域名的解析,就会真正请求域名服务器来解析这个域名了。
- 对企业来说域名的购买很重要?新手企业该怎么购买自己的域名?
- 新手该如何选择网址域名?网址域名如何看待?
- 对于域名后缀知道哪些?新手必知域名后缀
- 公司和个人选域名方法一样吗?有什么不同?
- 域名投资要知道什么基础知识?
- 用户解析域名该怎么做?有什么具体的步骤流程?
- 拥有两数字.cn的公司有哪些?盘点那些两数字cn域名
- 前面这两个步骤都是在本机完成的。到这里还没有涉及真正的域名解析服务器,如果在本机中仍然无法完成域名的解析,就会真正请求域名服务器来解析这个域名了。
- 网站更换新域名注意什么?有什么细节?