es6 class 的 constructor 是实例化时自动调用的初始化函数,按顺序接收参数、赋值给 this,并通过 super() 转交父类(若继承);必须显式定义才能绑定参数到 this,子类中需首行调用 super() 且参数须与父类严格匹配。

ES6 Class 的 constructor 是实例化时自动调用的初始化函数,参数传递的核心逻辑是:**按顺序接收、赋值给 this、再由 super() 转交父类(若继承)**。它不是装饰器或配置项,而是实实在在执行初始化操作的入口。
参数定义与基本赋值
在 constructor 形参列表中声明变量,就能直接通过 this.xxx 绑定到实例上:
- 参数名无需和属性名一致,但通常保持一致便于理解
- 支持默认值、解构、展开运算符等 ES6 语法
- 参数本质是函数参数,可做类型检查、转换或校验(如
name.trim()、Math.max(1, age))
例如:
constructor(name = '匿名', age, ...hobbies) {<br> this.name = name;<br> this.age = age || 0;<br> this.hobbies = hobbies;<br>}
继承场景下必须调用 super()
子类显式写了 constructor,就必须第一行调用 super(),且传参顺序、个数、类型要与父类构造函数严格匹配:
-
super()本质是执行父类构造函数,不是“继承关键字”,而是函数调用 -
super()前不能访问this,否则报ReferenceError - 可以传表达式结果,比如
super(person.name, +person.age, city?.toLowerCase() || '未知')
错误示例:
constructor(name) {<br> this.name = name; // ❌ this 不可用<br> super();<br>}
参数兼容性与调试建议
父类参数是否可选、是否有类型约束,直接影响子类调用方式:
- 若父类构造函数为
constructor(name, options = {}),子类可传super('张三', { role: 'admin' }) - 若父类要求三个必填参数,少传一个就会导致
this初始化不全,可能引发后续方法报错 - 调试时可在父类
constructor开头加console.log(arguments)确认实际接收到的参数
常见误用提醒
几个高频出错点需要特别注意:
- 省略
constructor却又想初始化属性?不行——必须显式写,否则无法绑定参数到this - 多个
constructor?语法错误,一个类只允许一个 - 把参数当静态属性处理?错——
constructor参数只作用于当前实例,不是类级别共享 - 在
super()后再修改已传入的参数?可以,但不会影响父类内部逻辑,只影响子类自己的this











