JavaScript class 中 static 定义静态方法和属性,属于类本身而非实例,不能通过 this 访问实例成员;静态方法用 ClassName.method() 调用,静态属性自 ES2022 起支持类内声明 static prop = val。

JavaScript class 中用 static 关键字定义静态方法和属性,它们属于类本身,不依赖实例,不能通过 this 访问实例成员。
定义静态方法
在方法名前加 static 即可。静态方法通常用于工具函数、工厂方法或与类逻辑相关但无需实例的操作。
- 不能访问
this(因为没有实例上下文),也不能调用非静态方法或访问非静态属性 - 直接通过类名调用:
ClassName.methodName() - 示例:
static add(a, b) {
return a + b;
}
static multiply(a, b) {
return a * b;
}
}
console.log(MathUtils.add(2, 3)); // 5
console.log(MathUtils.multiply(4, 5)); // 20
定义静态属性
ES2022 起支持类字段语法定义静态属性(需注意浏览器兼容性)。
- 写法:
static propertyName = value; - 也可在类外部赋值:
ClassName.propertyName = value;(但推荐类内声明更清晰) - 示例:
static baseUrl = 'https://api.example.com';
static timeout = 5000;
}
console.log(ApiConfig.baseUrl); // 'https://api.example.com'
静态成员的常见用途
- 缓存或配置共享:如 API 地址、默认参数
- 实例创建控制:比如单例模式、带校验的工厂方法
- 工具集合:日期格式化、数据验证等与类语义相关但无状态的操作
- 注意:静态属性若为对象或数组,多个地方修改会影响所有调用——它是一份共享数据
静态 vs 实例成员对比
- 静态成员:类名直接访问,无实例也能用;不绑定
this;无法访问this.xxx - 实例成员:必须先
new ClassName();方法中this指向当前实例;可自由访问其他实例属性/方法 - 可在静态方法中创建实例(如工厂),也可在实例方法中调用静态方法(如日志记录)


















