JavaScript 的 class 是 ES6 引入的原型继承语法糖,需先定义后使用,不提升;含 constructor 初始化实例、实例方法(挂载原型)、静态方法(static)、extends 继承及 super 调用父类。

JavaScript 中的 class 是 ES6 引入的语法糖,本质仍是基于原型的面向对象机制,但写法更清晰、更接近传统 OOP 语言。它本身不创建新作用域,也不提升(不像函数声明),必须先定义再使用。
基本类定义与构造方法
使用 class 关键字定义类,类名首字母通常大写;constructor() 是唯一特殊的内置方法,用于初始化实例属性,相当于“构造函数”。一个类中只能有一个 constructor,否则报错。
示例:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
}
const p1 = new Person('Alice', 28);
console.log(p1.name); // 'Alice'
类中定义方法(不加 function 关键字)
类体中直接写方法名和参数列表,**不需要** function 关键字,这些方法会自动添加到类的原型上(即所有实例共享)。静态方法用 static 修饰,挂载在类本身而非实例上。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 实例方法:可访问
this,通过实例调用 - 静态方法:不能访问
this(指向类本身),通过类名调用,常用于工具函数或工厂方法
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
<p>// 实例方法
greet() {
return <code>Hello, I'm ${this.name}</code>;
}</p><p>// 静态方法
static createAnonymous() {
return new Person('Anonymous', 0);
}
}</p><p>const p = new Person('Bob', 30);
console.log(p.greet()); // 'Hello, I'm Bob'
console.log(Person.createAnonymous().name); // 'Anonymous'</p>继承与 super 的使用
用 extends 实现继承,子类若定义了 constructor,必须在使用 this 前调用 super() —— 它负责初始化父类的 this,并执行父类构造函数逻辑。不调用或调用位置错误会报错。
-
super()在子类构造器中必须最先调用 -
super.xxx可调用父类的属性或方法(包括静态成员) - 子类未写
constructor,会默认添加constructor(...args) { super(...args); }
class Student extends Person {
constructor(name, age, grade) {
super(name, age); // 必须!
this.grade = grade;
}
<p>study() {
return <code>${this.name} is studying in grade ${this.grade}</code>;
}
}</p><p>const s = new Student('Tom', 19, 'Senior');
console.log(s.greet()); // 继承自 Person
console.log(s.study()); // 'Tom is studying in grade Senior'</p>注意点与常见误区
类声明不会被提升,必须先定义后使用;类内部默认启用严格模式;类名在类内部是只读的(不可重新赋值);箭头函数不能作为类方法(因无 this 绑定),且类中不允许定义属性(ES2022 起支持公有/私有字段语法,但基础类体仍只允许方法和 constructor)。
- ❌ 错误:在
constructor中未调用super()就访问this - ❌ 错误:类中直接写
name = 'xxx'(老版本会报错,新版本需用字段声明语法) - ✅ 正确:私有字段用
#前缀(如#id),且只能在类内部访问

















