constructor是类的构造函数,用于new实例时初始化属性;必须唯一,继承时需调用super();可设默认值、创建独立引用类型、绑定this以防丢失。

在 JavaScript 的 class 语法中,constructor 是类的构造函数,用于创建实例时初始化属性。它会在 new MyClass() 被调用时自动执行,是定义实例属性(包括从参数赋值、设置默认值、绑定方法等)的核心位置。
constructor 的基本写法和作用
constructor 是一个特殊方法,每个 class 最多只能有一个;如果没有显式声明,JavaScript 会提供一个空的默认构造函数。一旦自定义了 constructor,就必须用 super() 调用父类构造函数(如果继承了其他类)。
- 直接在 constructor 内给
this赋值,就完成了实例属性的初始化 - 参数可按需接收,并用于设置初始状态
- 不能返回原始值(如字符串、数字),否则会被忽略;若返回对象,则该对象会成为 new 表达式的返回结果(较少见)
初始化普通属性和带默认值的属性
最常见的用法是把传入的参数赋给 this,也可设定默认值避免 undefined:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
class Person {
constructor(name = 'Anonymous', age = 0) {
this.name = name;
this.age = age;
this.id = Math.random().toString(36).substr(2, 9); // 每次新建实例都生成唯一 id
}
}
const p1 = new Person('Alice', 28);
console.log(p1.name); // 'Alice'
console.log(p1.id); // 随机字符串
初始化引用类型属性要小心
如果属性是数组、对象等引用类型,不要在 class 顶层直接初始化(如 arr = []),而应在 constructor 中创建新实例,避免多个实例共享同一引用:
class TodoList {
constructor() {
this.items = []; // ✅ 每个实例都有独立数组
this.meta = { createdAt: new Date() };
}
}
// ❌ 错误写法(所有实例共用同一个数组)
// class BadExample {
// items = []; // 类字段语法,但这里会共享!(注意:实际行为取决于是否启用私有字段/编译器)
// }
在 constructor 中绑定 this(适用于事件回调等场景)
当类方法需要作为回调(如事件监听器)使用时,为避免 this 丢失,可在 constructor 中显式绑定:
class Button {
constructor(label) {
this.label = label;
this.handleClick = this.handleClick.bind(this); // 绑定到当前实例
}
handleClick() {
console.log(`Button "${this.label}" clicked`);
}
}
现代写法更推荐使用箭头函数属性(本质也是在 constructor 中隐式绑定),例如:handleClick = () => { ... },效果类似但更简洁。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










