javascript中class是函数的语法糖,强制使用new调用;含constructor、实例方法、静态方法、getter/setter、字段声明及extends继承,支持私有字段与严格模式。

JavaScript 中用 class 语法定义类,本质是函数的语法糖,但更清晰、更符合面向对象习惯,也强制使用 new 调用,避免忘记 new 导致的 this 绑定错误。
基础类结构:构造器与实例方法
类必须包含一个 constructor 方法(可空),用于初始化实例;其他方法直接写在类体中,自动成为原型方法:
class Person {
constructor(name, age) {
this.name = name;
this.age = age;
}
sayHello() {
return `Hello, I'm ${this.name}`;
}
}
const p = new Person('Alice', 30);
p.sayHello(); // "Hello, I'm Alice"- 类声明不会被提升(和
let类似),必须先声明再使用 - 所有方法默认不可枚举,且严格模式下自动启用
- 不能在类内部用
var/let/const声明同名属性(如name),否则报错;实例属性需在constructor或使用字段声明(见下)
类字段声明(ES2022+):更简洁的实例属性初始化
可在类顶层直接声明实例属性(含初始值),无需写进 constructor:
class Counter {
count = 0; // 实例字段
#step = 1; // 私有字段(井号前缀)
<p>increment() {
this.count += this.#step;
}
}</p>- 公共字段(如
count)会在每次new时初始化,等价于在constructor中赋值 - 私有字段(
#step)仅类内部可访问,外部读写会报错,真正实现封装 - 字段声明支持表达式,如
now = new Date()、id = Math.random()
静态方法与 getter/setter
用 static 关键字定义静态成员,属于类本身而非实例;用 get/set 定义计算属性:
class Circle {
constructor(radius) {
this.radius = radius;
}
get area() {
return Math.PI * this.radius ** 2;
}
static createUnit() {
return new Circle(1);
}
}
const c = new Circle(5);
c.area; // 自动计算,无需括号
Circle.createUnit(); // 直接调用类方法-
get方法无参数,调用时像访问属性(c.area),适合只读或轻量计算 -
set方法接收一个参数,可用于数据校验或联动更新(如设置width同时更新area) - 静态方法常用于工具函数、工厂方法或与类逻辑相关但不依赖实例的场景
继承:extends 与 super
用 extends 实现类继承,子类构造器中必须先调用 super() 初始化父类 this:
class Animal {
constructor(name) {
this.name = name;
}
speak() {
console.log(`${this.name} makes a sound.`);
}
}
<p>class Dog extends Animal {
constructor(name, breed) {
super(name); // 必须!否则报错
this.breed = breed;
}
speak() {
console.log(<code>${this.name} barks!</code>);
}
}</p>-
super()在子类constructor中必须出现在this使用之前 -
super.xxx可在方法中调用父类方法或访问父类属性(如super.speak()) - 类只能单继承,但可通过组合或混入(mixin)复用多个行为
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











