静态方法用static关键字定义,直接挂载到类本身而非实例,通过类名调用,this指向构造函数,不可访问实例属性,适用于工具函数、工厂方法等场景。

在 JavaScript 的 class 语法中,用 static 关键字定义静态方法,就是把方法直接挂载到类本身上,而不是实例上。这意味着你**不需要创建实例**,就能通过类名直接调用它。
静态方法的定义方式
在 class 内部,把 static 关键字放在 function 或箭头函数前即可:
- 只能在 class 声明内部使用,不能写在 class 外面再赋值
- 静态方法内部的
this指向该 class 构造函数本身(不是实例) - 不能访问实例属性(如
this.name),因为没有实例上下文
例如:
class MathUtils {
static add(a, b) {
return a + b;
}
<p>static multiply(a, b) {
return a * b;
}
}</p><p>console.log(MathUtils.add(2, 3)); // 5
console.log(MathUtils.multiply(4, 5)); // 20
静态方法与实例方法的区别
关键区别在于调用位置和可访问性:
立即学习“Java免费学习笔记(深入)”;
- 静态方法:通过
ClassName.methodName()调用,无法通过实例访问(new ClassName().methodName()会报错) - 实例方法:定义时不加
static,只能通过实例调用,能访问this上的实例属性和方法 - 静态方法中不能用
super访问父类的实例方法,但可以访问父类的静态方法(如果继承了)
静态方法的常见用途
适合封装与类相关、但不依赖具体实例逻辑的功能:
-
工具函数:比如数据校验、格式转换(
User.isValidEmail(email)) -
工厂方法:返回类的实例(
Person.fromJSON(jsonStr)) -
单例或缓存管理:控制类级资源(
Database.getInstance()) -
替代构造函数:提供多种初始化方式(
Date.now()就是典型的内置静态方法)
继承中的静态方法
子类会继承父类的静态方法,也可以重写或新增:
class Animal {
static info() {
return 'A living creature';
}
}
<p>class Dog extends Animal {
static info() {
return 'A loyal pet';
}</p><p>static bark() {
return 'Woof!';
}
}</p><p>console.log(Animal.info()); // 'A living creature'
console.log(Dog.info()); // 'A loyal pet'
console.log(Dog.bark()); // 'Woof!'


















