JavaScript中静态成员用static关键字定义,属类本身而非实例,通过类名访问;静态属性在类初始化时赋值一次、所有实例共享;静态方法不可访问实例状态,但可用this调用其他静态成员。

JavaScript 中用 class 语法定义静态成员,直接在类体内使用 static 关键字修饰属性或方法即可。静态成员属于类本身,不随实例创建而复制,通过类名访问,不能被实例调用。
定义静态属性
在类内部用 static 声明变量,它会在类初始化时赋值一次,所有实例共享同一份数据:
class MathUtils {
static PI = 3.14159;
static MAX_RETRY = 3;
}
访问方式:MathUtils.PI、MathUtils.MAX_RETRY。注意:不能写成 new MathUtils().PI,会返回 undefined。
定义静态方法
静态方法通常用于工具函数、工厂逻辑或与类相关但无需访问实例状态的操作:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
立即学习“Java免费学习笔记(深入)”;
- 方法前加
static,参数和函数体写法与普通方法一致 - 静态方法内部不能使用
this指向实例(因为没有实例上下文),但可用this指向类本身(如调用其他静态成员) - 常见用途:对象创建(如
fromJSON())、校验、常量计算等
class User {
static fromJSON(json) {
const { name, age } = JSON.parse(json);
return new User(name, age);
}
static isValidAge(age) {
return Number.isInteger(age) && age > 0 && age < 150;
}
constructor(name, age) {
this.name = name;
this.age = age;
}
}
// 使用示例
const user = User.fromJSON('{"name":"Alice","age":28}');
console.log(User.isValidAge(28)); // true
静态成员的继承与覆盖
子类会继承父类的静态成员,也可用自己的 static 声明覆盖或扩展:
- 子类可直接访问父类静态属性/方法:
ChildClass.superStaticProp(若未重写) - 重写时只需在子类中再次用
static声明同名成员 - 可通过
super在子类静态方法中调用父类静态方法(仅限方法,不适用于属性)
class Animal {
static kingdom = "Animalia";
static describe() {
return `Kingdom: ${this.kingdom}`;
}
}
class Dog extends Animal {
static kingdom = "Canis"; // 覆盖
static bark() {
return "Woof!";
}
static fullDescribe() {
return `${super.describe()} → ${this.bark()}`; // super 指向 Animal
}
}
console.log(Dog.kingdom); // "Canis"
console.log(Dog.fullDescribe()); // "Kingdom: Animalia → Woof!"
注意事项
静态成员不是“编译期绑定”,而是运行时绑定到类构造函数上,因此:
- 静态属性不支持私有字段语法(
#field)直接修饰,但可通过闭包或 WeakMap 模拟静态私有状态 - 类声明不会提升(hoisting),静态成员在类定义执行后才存在,不能在类定义前访问
- 箭头函数不适合作为静态方法,因其不绑定
this,会导致无法正确访问类自身

















