用JavaScript函数中的arguments对象模拟重载效果
说起重载,什么是重载?
官方概念:多个函数,拥有相同的函数名,但不同的参数列表
调用时,可根据传入的参数值列表,自动调用匹配的函数
个人理解什么是重载:
就好比去超市结账,用户只需告诉收银员“结账”这两个字,收银员会给你几个选择,现金,刷卡,或者支付宝。这里每个选择都是“结账”这个方法(或者说是函数)的不同参数,用户选择不同的参数后,收银员对应执行参数对应的 函数体。
按照理论大致程序表示:
收银员:(有三个函数名为结账的函数)
function 结账(现金) function 结账(刷卡) function 结账(支付宝)
{ { {
现金付款流程 刷卡流程 支付宝流程
} { {
顾客:调用
Function 结账(一百元现金)
{
现金付款流程
}
***************以上是理论阐述重载,但是在js中没有重载的概念!************************
那么在js中如何实现重载呢?
虽然js中不支持重载的概念,但是在函数内部有一个arguments对象可以通过获取参数列表,判断参数个数的方法来模拟重载效果
什么是arguments对象
所有function内部,自动创建的一个对象
专门顺序接收所有传入函数的参数
可当做数组使用,也就是类数组对象
什么是类数组对象:长得像数组的对象---像数组但不是数组,可以用数组的length,和下标查找,但是push之类的数组方法不可使用
********** 接下来看两个案例**********
案例1
案例2:
值得注意的是:无论函数有没有定义参数变量,arguments都能获得所有参数值
若你之前定义函数的时候传入了三个值,但是也比不过arguments在底层的改变。
比如:我将上面案例改变一下,运行结果不变。定什么参数arguments不受影响
何时使用重载:今后只要实现一个业务,
可能根据参数的不同,执行不同的流程时,就要用重载!不需要为每种流程分别起名。