JS语法之:rest参数

《JavaScript高级程序设计》在讲Function类型时说:

说起来ECMAScript中什么最有意思,我想那莫过于函数了。

今天来看看有意思的地方之一:rest参数。

我们知道,ES6支持类(class)这种写法了:

class A {
    constructor(x, y) {
        this._x = x;
        this._y = y;
    }
}


如果是C++,在对象初始化时如果想指定不同的方式来初始化数据成员,可以重载构造函数,然后在定义新对象时,编译器根据实参类型决定使用哪个构造函数。

而JavaScript没有函数重载,如何实现支持多种初始化方式呢?

首先,JS函数的参数与大多数其他语言中函数的参数有所不同,即便刚开始只定义了两个参数,在调用时也未必一定要传两个,可以传一个或者三个。

在函数体内,它可以通过一个对象来获取所有参数,这个对象是:arguments。比如:

function sayHi() {
    alert("hello " + arguments[0] + "," + arguments[1]);
}

到了ES6,又引入了rest参数,形式为:...变量名。arguments对象不是数组,只是可以下标访问而已,而rest参数是一个真正的数组。

使用rest参数,上面的构造函数可以这样写:

class A {
    constructor(...args) {
        if (args.length == 3) {
            this._x = args[0];
            this._y = args[1];
            this._z = args[2];
        }
        else if (args.length == 2) {
            this._x = args[0];
            this._y = args[1];
            this._z = 0;
        }
        else {
            throw TypeError("args error!");
        }
    }
}

 

  • 11
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值