02-javascript的重载overload

117 阅读2分钟

1.为什么会有重载

​ 做同一件事,可能根据提供的东西不同,而执行不同的逻辑。

比如

​ 手机支付,现金支付,刷卡支付

程序中

​ 如果为每种不同的执行逻辑,分别定义一个函数,再起不同的函数名,就很繁琐不便于将来的记忆和使用。

比如:

function payByPhone(){console.log('手机支付...')}
function payByMoney(money){console.log('现金支付...')}
function payByCard(cardld,pwd){console.log('刷卡支付...')}
/*
调用时不便于记忆,一件事写了三个函数
*/
payByPhone();
payByMoney(100);
payByCard('9553 1245','123456')

解决(重载overload):用一个函数来做,根据传入的参数的个数不同来实现不同的功能

2.什么是重载

2.1java中的重载

​ 函数名相同,参数的个数不相同或者参数的类型不同,在调用时可以自动根据传入的实参值不同,选择对应的函数。

//java的思想,用javascript来实现,伪代码
function pay(){console.log('手机支付...')}
function pay(money){console.log('现金支付...')}
function pay(cardld,pwd){console.log('刷卡支付...')}

//调用时
pay();//手机支付
pay(100);//现金支付
pay('1564 545','123456');//刷卡支付

注意:在javascript中行不通的,会被覆盖(js中只关注函数名),而在java中把 函数+参数 做为一个整体,所以不会被覆盖

2.2javascript中的重载

​ 借肋于arguments对象来解决javascript中的重载

2.2.1什么是arguments

  1. 每个函数中自带的----不用创建,直接使用

  2. 专门接受所有传入函数的实参值的----内容

  3. 类数组对象----结构

    2.2.1.1什么是类数组对象

    什么是类数组对象: 长的像数组的对象

    相同: 1. 下标, 2. length, 3. for循环遍历

    不同: 本质/类型不同

    ​ 数组是Array类型的对象

    ​ 类数组对象是Object类型的对象

    ​ 导致: 类数组对象无权使用数组类型的任何函数

2.2.2怎么使用arguments

​ 只定义一个函数,且不要定义任何形参

​ 在函数内部,判断arguments的长度,元素值,元素类型等条件,根据传入实参值或实参个数不同,来选择执行不同的逻辑。

重载1.jpg

3.什么时候用

一件事,可能有根据传入的实参值不同,执行不同的逻辑时,都用重载。

4.好处

减少函数的个数