constructor是实例化时首个执行的初始化方法,负责用参数为实例定型并设置初始属性,如this.name=name,还可加入校验逻辑。

constructor 是实例化时自动触发的初始化入口
当你写 new Person("Tom", 30),JavaScript 并不是直接生成一个空对象就结束。它会立刻查找 Person 类中是否存在 constructor 方法——如果存在,就立即执行;如果没显式定义,引擎会悄悄补上一个空的 constructor() {}。这个方法是整个实例化流程中**第一个被执行的代码块**,也是你唯一能合法操作 this、设置初始属性的地方。
它不只是赋值,更是控制实例状态的起点
constructor 的核心任务是“定型”:把传入的参数转化为实例自身的属性,让每个新对象从诞生起就具备明确的数据结构。比如:
-
this.name = name把参数挂到实例上,后续所有方法都能访问 - 可以加入校验逻辑:
if (age - 可预设默认值:
this.isActive = isActive ?? true - 甚至初始化内部对象:
this.meta = { createdAt: Date.now() }
这些操作一旦错过 constructor,就得靠外部手动补全,容易遗漏或不一致。
返回值有讲究:多数时候别 return,除非你清楚后果
constructor 默认隐式返回 this,也就是新创建的实例。但如果你主动写了 return:
- 返回原始值(如字符串、数字):被忽略,仍返回
this - 返回对象(包括数组、函数等):该对象会替代原本的实例,但
instanceof检测会失败,因为原型链没被正确链接
所以除非你在做高级封装(比如代理构造、单例包装),否则不要在 constructor 里 return 非 this 的对象。
它和类的关系:没有它,类就不完整
class 语法本质是构造函数的语法糖。即使你不写 constructor,JS 也会为你注入一个空版本。但一旦你需要初始化,就必须显式声明——而且只能有一个。重复定义会报错。另外要注意:
- 子类继承父类时,必须在 constructor 中第一行调用
super(),否则无法访问this - 如果父类 constructor 接收参数,
super(...args)必须传够,否则可能引发 undefined 行为 - 箭头函数不能作为 constructor,因为它没有自己的
this绑定
constructor 不是装饰,它是类的生命线——实例能不能立住,就看这一小段代码有没有把基础打牢。

















