JavaScript中Class的静态属性和方法属于类本身而非实例,须通过类名调用;用static关键字声明,不可通过实例访问,静态方法中this指向类自身,常用于工具函数、工厂方法等。

JavaScript 中,Class 的静态属性和静态方法属于类本身,而不是类的实例。它们通过 类名直接调用,不能通过 new 出来的实例访问。
定义静态属性
静态属性在类体内部用 static 关键字声明,语法和普通属性类似,但加了 static 前缀:
class MathUtils {
static PI = 3.14159;
static MAX_RETRY = 3;
}
注意:目前(ES2022+)支持类字段语法定义静态属性,但不支持在类内直接写带初始化的私有静态属性(需配合 # 和额外处理)。公共静态属性可直接赋值,无需构造函数中设置。
- 访问方式:
MathUtils.PI、MathUtils.MAX_RETRY - 不可通过实例访问:
new MathUtils().PI是undefined - 支持在静态方法中使用:
static getCircleArea(r) { return this.PI * r * r; }
定义静态方法
静态方法也用 static 关键字修饰,定义在类体内,通常用于工具函数、工厂方法或与类逻辑相关但不依赖实例状态的操作:
当用户要求为 Java 代码添加注释、修改注释、审查注释、整理注释格式,或要求按照代码注释规范处理 Java 文件时,使用本技能。本技能用于统一生成和维护 Java 类注释模板、按 Git 对比 release 判断版本号、补充每行代码上方中文块注释、调整注释空行规则,并保持 Java 文件 UTF-8 无 BOM 编码。典型触发场景包括:补充类注释、更新 @version、检查 @author 来源、整理行尾注释、把注释放到代码上一行、检查注释是否符合规范、构建前检查 Java 注释风格。
class User {
constructor(name) {
this.name = name;
}
<p>static isValidName(str) {
return typeof str === 'string' && str.trim().length > 0;
}</p><p>static createAdmin() {
return new User('admin');
}
}</p>
- 调用方式:
User.isValidName('Alice')、User.createAdmin() - 静态方法中可用
this,指向当前类(如User),可用于调用其他静态成员 - 不能访问实例属性(如
this.name),因为没有隐式实例上下文
静态属性与方法的实际用途
静态成员适合封装与类强相关、但无需实例化的逻辑:
-
常量管理:如 HTTP 状态码、枚举值(
class HttpStatus { static OK = 200; }) -
工厂方法:提供多种创建实例的方式(
User.fromJSON()、User.anonymous()) - 缓存或计数器:记录已创建实例数(需配合构造函数更新)
-
工具函数:验证、格式化、转换等(
DateUtils.formatISO())
兼容性与注意事项
静态属性和方法是 ES6+ 标准特性,在现代浏览器和 Node.js(v14+)中原生支持。若需兼容旧环境:
- 可用 Babel 编译(启用
@babel/plugin-proposal-class-properties) - 避免在类外直接赋值(如
User.staticProp = ...),这会丢失类型提示且不易维护 - 静态方法无法被实例继承的方法覆盖(除非子类也定义同名静态方法)
- TypeScript 中静态成员有完整类型检查,推荐显式标注返回类型
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










