您的位置:首页 > Web前端 > JavaScript

【原创】用JavaScript函数中的arguments对象模拟重载效果

2015-10-21 15:39 585 查看
[b]用JavaScript函数中的arguments对象模拟重载效果[/b]

说起重载,什么是重载?

官方概念:多个函数,拥有相同的函数名,但不同的参数列表

调用时,可根据传入的参数值列表,自动调用匹配的函数

个人理解什么是重载:

就好比去超市结账,用户只需告诉收银员“结账”这两个字,收银员会给你几个选择,现金,刷卡,或者支付宝。这里每个选择都是“结账”这个方法(或者说是函数)的不同参数,用户选择不同的参数后,收银员对应执行参数对应的 函数体。

按照理论大致程序表示:

收银员:(有三个函数名为结账的函数)

function 结账(现金) function 结账(刷卡) function 结账(支付宝)

{ { {

现金付款流程 刷卡流程 支付宝流程

} { {

顾客:调用

Function 结账(一百元现金)

{

现金付款流程

}

***************以上是理论阐述重载,但是在js中没有重载的概念!************************

那么在js中如何实现重载呢?

虽然js中不支持重载的概念,但是在函数内部有一个arguments对象可以通过获取参数列表,判断参数个数的方法来模拟重载效果

什么是arguments对象

所有function内部,自动创建的一个对象

专门顺序接收所有传入函数的参数

可当做数组使用,也就是类数组对象

什么是类数组对象:长得像数组的对象---像数组但不是数组,可以用数组的length,和下标查找,但是push之类的数组方法不可使用

********** 接下来看两个案例**********

案例1



案例2:



值得注意的是:无论函数有没有定义参数变量,arguments都能获得所有参数值

若你之前定义函数的时候传入了三个值,但是也比不过arguments在底层的改变。

比如:我将上面案例改变一下,运行结果不变。定什么参数arguments不受影响



何时使用重载:今后只要实现一个业务,

可能根据参数的不同,执行不同的流程时,就要用重载!不需要为每种流程分别起名。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: