当前位置:首页 > 人工智能

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 没有函数重载,但是可以实现函数重载。

香港云服务器

分享到:

滇ICP备2023006006号-16