前言
在 JavaScript 中并没有重载函数的功能,但每个函数中的 Arguments 对象可以模拟重载的实现。
正文
1. 通过下标访问实参:
arguments 不是一个数组对象,没有数组对象所有的属性和方法,但通过 arguments[0]、arguments[1]...去获取实参。
function demo () { let str = ''; for(let i = 0; i < arguments.length; i++) { str += arguments[i] + ', '; } } console.log(demo('小明', '小红')); // 输出:小明, 小红,
2. 实现重载
利用 Arguments 对象实现函数重载的方式可以有几种,除了根据参数的个数,还可以根据传入参数的类型、或者利用参数中特殊的参数值来执行不同的操作。
// 通过参数个数实现重载 function overloadDemo () { switch(arguments.length) { case 0: console.log(0); break; case 1: console.log(1); break; default: console.log(arguments.length); break; } } overloadDemo('name'); // 输出:1
3. callee属性
Arguments 对象的 callee
属性指向的是正在被执行的Function对象。常常利用该属性实现递归。
sum(n) { if(n==1) { return 1; } else { return n + arguments.callee(n-1); } } console.log(sum(5)); // 输出:15