JS ES6 类构造函数行为

And*_*s B 1 javascript node.js es6-class

我有一个关于 ES6 类中的构造函数的问题。

我定义了以下类游戏:

module.exports = class Game {constructor() {}};
Run Code Online (Sandbox Code Playgroud)

现在我创建了一个这样的实例。有无参数:

let Game = require('./lib/models/game'); console.log(new Game());console.log(new Game(1,2,3));
Run Code Online (Sandbox Code Playgroud)

如果我使用 params 创建一个实例,则不会出现错误或异常。这是什么原因?

T.J*_*der 5

因为 JavaScript 函数不会检查您在调用它们时提供的参数数量是否与形式参数的数量相同。这不仅适用于构造函数,也适用于所有函数。(当然,除非在函数中添加显式代码来进行检查。)

如果您提供的参数多于形式参数,您可以通过特殊的arguments伪数组访问这些参数(但请继续阅读):

function foo() {
    for (let i = 0; i < arguments.length; ++i ) {
        console.log(`arguments[${i}] =`, arguments[i]);
    }
}
foo("a", "b");
Run Code Online (Sandbox Code Playgroud)

输出:

参数[0] = a
参数[1] = b

类似地,如果你声明形式参数并且没有给出它们的值,它们的值将是 undefined.

arguments[0] = a
arguments[1] = b

输出:

参数:未定义

arguments过去经常用于可变参数列表;但是从 ES2015 开始,转变是使用 rest 参数来代替:

function foo(arg) {
    console.log("arg:", arg);
}
foo();
Run Code Online (Sandbox Code Playgroud)

输出:

一 = 一
休息[0] = b
休息[1] = c