本文源码 这里
重载是什么
定义:函数名相同,函数的参数列表不同(包括参数个数和参数类型),至于返回类型可同可不同
js没有实现重载
| let calculate={ add(a){ console.log(a); }, add(a,b){ cosole.log(a+b); } }; calculate.add(5); calculate.add(5,5);
|
根据上面的例子发现,当有两个重名的方法的时候,会执行后面的那一个
模拟重载
虽然js本身不支持重载,但是我们可以通过 arguments对象和rest参数来模拟重载的效果
代码演示
arguments对象版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
| let calculate = { add_arguments() { console.log(`arg是数组吗:${arguments instanceof Array}`); let argCount = arguments.length; let sum = 0; switch (argCount) { case 1: sum = arguments[0]; console.log(`sum=${sum}`); break; default: for (let i in arguments) { sum += arguments[i]; } console.log(`sum=${sum}`); break; }; return sum; } }; calculate.add_arguments(1); calculate.add_arguments(1, 1, 100);
|
rest参数版本
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
| let calculate={ add_rest(one, ...arg) { console.log(`arg是数组吗:${arg instanceof Array}`); let sum = 0; if (arg.length == 0) { console.warn('参数只有一个'); console.log(one); sum = one; } else { console.log(`参数有${arg.length+1}个`); sum = one; for (let i in arg) { console.log(arg[i]); sum += arg[i]; }; console.log(sum); }; return sum; } }; calculate.add_rest(0); calculate.add_rest(0,10);
|