初识 JavaScript 函数 Arguments 模拟重载
在 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 对象。常常利用该属性实现递归。
function sum(n) {
if (n == 1) {
return 1
} else {
return n + arguments.callee(n - 1)
}
}
console.log(sum(5)) // 输出:15
但是 arguments.callee
和 arguments.caller
已经在 ES5 严格模式中禁用,将来也会彻底移除。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论