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
-
每个函数中自带的----不用创建,直接使用
-
专门接受所有传入函数的实参值的----内容
-
类数组对象----结构
2.2.1.1什么是类数组对象
什么是类数组对象: 长的像数组的对象
相同: 1. 下标, 2. length, 3. for循环遍历
不同: 本质/类型不同
数组是Array类型的对象
类数组对象是Object类型的对象
导致: 类数组对象无权使用数组类型的任何函数
2.2.2怎么使用arguments
只定义一个函数,且不要定义任何形参
在函数内部,判断arguments的长度,元素值,元素类型等条件,根据传入实参值或实参个数不同,来选择执行不同的逻辑。
3.什么时候用
一件事,可能有根据传入的实参值不同,执行不同的逻辑时,都用重载。
4.好处
减少函数的个数