面试官问你JS是如何实现函数重载的?你会怎么回答?你是不是怀疑我在书上看到JS没有函数重载。如果面试官说可以实现,那么是有办法的,怎么实现呢?1.什么是函数重载?重载函数是指两个或多个同名函数,实现一个函数名的函数有多个。函数重载要求编译器在调用一个函数时能够唯一确定应该调用哪个函数?由于存在多个同名函数,在确定函数的实现时,需要根据函数的参数个数和类型来区分,即实现函数重载时,要求:同名函数的参数个数或类型不一致,否则无法实现函数重载。重载的特点:多个同名函数。不同的参数。2、JS中有函数重载吗?我在看《JavaScript 高级程序设计(第三版)》这本书,看到第5章有明确的提示,JS没有函数重载。我们在书中可以看到《JavaScript 高级程序设计(第三版)》,JS中的同名函数会被上一个函数覆盖,无法实现多个函数,如:functionadd(a,b){returna+b}functionadd(a,b,c){returna+b+c}console.log(add(1,2));//NaNconsole.log(添加(1,2,3));//6如果我们需要用JS实现上面的add方法对两个或三个值求和,如何解决?解决方案1:使用argumentsfunctionadd(){varreg=arguments;if(reg.length==2){returnreg[0]+reg[1]}elseif(reg.length==3){returnreg[0]+reg[1]+reg[2]}}控制台.log(add(1,2))//3console.log(add(1,2,3))//6上面的方法虽然实现了上面简单的功能,但是勉强算是一种实现函数重载的方法,但也有某些缺点。它的缺点:如果功能复杂,代码量太大。不利于维护和再利用。这时候问题来了,怎么用JS来实现呢?可以简单地以闭包的形式实现。3、JS是如何实现重载的?functionaddMethodToObject(obj,name,fn){consttemp=obj[name]obj[name]=function(){if(fn.length===arguments.length){返回fn。apply(obj,arguments)}elseif(typeoftemp==='function'){returntemp.apply(obj,arguments)}}}上面的方法是给一个对象添加自定义方法,可以接收三个parameters:需要添加方法的对象,由用户自定义的方法名来定义。该方法要实现的具体功能是通过回调实现的。addMethodToObject(group,'find',function(){return{peoples:this.peoples,count:this.peoples.length}})addMethodToObject(group,'find',function(isMale){如果(!!isMale){constmale=this.peoples.filter(item=>item.sex==='male')返回{peoples:male,count:male.length}}else{constfemale=this.peoples.filter(item=>item.sex==='女性')return{peoples:female,count:female.length}}})addMethodToObject(group,'find',function(elder,age){if(!!elder){constelder=this.peoples.filter(item=>item.age>=age)return{peoples:elder,伯爵:长老。length}}else{constyounger=this.人们。filter(item=>item.age
