谈及Java中的重载问题,JavaScript中存在重载吗?

    xiaoxiao2026-09-17  1

           初学前端知识,在学习JS基础的过程中,突然发现了不能重载的问题,后来查阅了相关资料得出了一个结论就是:JS中是不存在重载的!如果您被面试官问到该问题,请态度坚决(就是相信真理)地告诉他JS中是不存在重载的,但是可以通过其他方式来模拟(就是实现了那种效果,并不是真的重载)重载,这就得提及到arguments这个数组了。

           arguments是系统中的一个数组,用来存储函数传递的参数,这和Java中写main方法时的(agrs [])类似。在JS中,可以用这个数组来接受函数传递过来的参数,从而根据不同的参数进行判断,从而实现不同的效果,这就达到了模拟重载的效果。

           从以下例子可以看出JS中是不存在重载的

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JS中不存在重载!</title> </head> <body> </body> <script type="text/javascript"> function sum(a,b) { alert(a+b); //得到NaN,表示结果不是数字 } function sum(a,b,c) { alert(a+b+c); //得到NaN,表示结果不是数字 } function sum(a,b,c,d) { alert(a+b+c+d); //得到10 } sum(1, 2); sum(1, 2, 3); sum(1, 2, 3, 4); </script> </html>      其实在JS中也是存在一定的就近原则的,三个调用的都是有四个参数的方法,假如你想方法顺序换成参数为三个、四个和两个的,你会发现结果会是:3、3、3。如果传了4个参数的值,它会取前两个进行运算,其他的都在arguments数组中存着,所以会出现这样的结果。那么,怎么模拟重载的效果呢?请看下文:

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>JS中不存在重载!</title> </head> <body> </body> <script type="text/javascript"> <span style="white-space:pre"> </span>function sum() { <span style="white-space:pre"> </span>var sum = 0; <span style="white-space:pre"> </span>alert(arguments.length); <span style="white-space:pre"> </span>for (var i = 0; i < arguments.length; i++) { <span style="white-space:pre"> </span>sum += arguments[i]; <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>alert(sum); <span style="white-space:pre"> </span>} <span style="white-space:pre"> </span>sum(1, 2); <span style="white-space:pre"> </span>sum(1, 2, 3); <span style="white-space:pre"> </span>sum(1, 2, 3, 4); </script> </html>        当然例子有些粗糙,这只是为了说明一种实现方式。在实际开发经验中,会有更多更好的方法,但是请记住那也是模拟重载的一种做法,在JS中是不存在重载的!

    转载请注明原文地址: https://ju.6miu.com/read-1312121.html
    最新回复(0)