关于ES6类构造函数传入参数无报错的原因咨询
为什么ES6类构造函数传多余参数不会报错?
嘿,这个问题其实是JavaScript语言本身的特性导致的,和ES6类的机制直接相关~
JavaScript是弱类型、动态语言,它的函数(包括类的构造函数)在调用时不会检查传入的参数数量是否和定义的形参数量匹配。具体来说:
- 当你传入的参数比形参多的时候,多出来的参数不会被主动抛出错误,只是不会被构造函数里的代码处理(你可以通过
arguments对象访问到这些额外参数,但如果你的构造函数没用到它们,就相当于被忽略了)。 - 当你传入的参数比形参少的时候,对应的形参会被赋值为
undefined,同样不会报错。
回到你的代码例子:
你的Game类构造函数定义是:
module.exports = class Game { constructor() {} };
没有声明任何形参,但调用new Game(1,2,3)时,JavaScript不会因为参数数量不匹配而抛出错误——这些1,2,3只是被传入了构造函数,但因为构造函数里没有处理它们的逻辑,所以不会对实例产生影响,实例依然能正常创建。
举个普通函数的例子更直观:
function sayHi() { console.log('Hi!'); } sayHi('Tom', 25); // 输出"Hi!",完全不会报错
如果想要强制限制构造函数不能接收参数,你可以手动在构造函数里添加参数数量检查:
module.exports = class Game { constructor() { if (arguments.length > 0) { throw new Error('Game构造函数不接受任何参数!'); } } };
这样当你传入参数调用new Game(1,2,3)时,就会抛出你预期的错误了。
内容的提问来源于stack exchange,提问作者Andre Aus B
相关产品推荐
相关产品推荐

