什么是重载?
相同函数名,不同形参列表的多个函数,可以在调用时根据传入的实参值的不同,执行不同的逻辑。
好处:减少函数名的个数,减轻调用者的负担
如何实现呢?
在JS中是禁止两个同名函数同时存在的,如果同时存在,后面定义的函数会覆盖前面的函数,
可以借助arguments来解决。
什么是arguments?
函数中自带的,不需要自己定义,它是一个类数组对象。
什么是类数组?长得像数组,有下标,有length属性,也可以循环。不同的是数组是Array类型的对象,类数组是Object对象。类数组无权使用数组的方法
如何实现重载?
- 只定义一个函数,不需要任何参数
- 在函数内部,判断arguments的长度,元素值,元素类型等条件,根据传入实参值不同执行不同的逻辑
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> function pay( ){ // arguments[ ].length // 0 1... if(arguments.length==0){ console.log(`手机支付...`) }else if(arguments.length==1){ console.log(`现金支付,收您${arguments[0]}元`) }else{ if(arguments[1]=="123456"){ console.log(`刷卡支付,从您卡号${arguments[0]}扣款成功!`) }else{ console.log(`刷卡支付,密码不正确`); } } } pay(); pay(100); pay("6553 1234","123456"); pay("6553 1234","12345"); </script> </body> </html> 运行结果: 手机支付... 现金支付,收您100元 刷卡支付,从您卡号6553 1234扣款成功! 刷卡支付,密码不正确