静态属性属于类自身,用于存储与类相关的元数据配置;固定值用 static 字段(可配合 readonly 或 Object.freeze),动态值用 static get;可通过 static 方法校验、初始化;静态属性不继承,覆盖需谨慎,推荐用 static defaults 模式扩展。

静态属性是类自身拥有的属性,不依赖实例,适合存放与类相关的元数据配置,比如版本号、默认选项、类型标识等。关键在于明确“谁需要读取”“是否允许修改”“是否需继承控制”,再选择 static 字段或 static get 访问器。
直接定义静态字段存配置项
适用于固定、不可变的元数据,如标识符、常量级参数:
- 用
static readonly(TypeScript)或仅声明不赋值再手动冻结(JavaScript)防止意外修改 - 常见用途:类名别名、协议版本、数据格式标识
- 示例:class ApiClient { static version = '2.1'; static baseUrl = '/api'; }
用静态 getter 封装动态元数据
当元数据需运行时计算、依赖环境或需访问其他静态成员时,用 static get 更安全灵活:
- 避免在类声明时执行副作用逻辑
- 支持基于已有静态字段组合生成新配置,例如完整 API 路径
- 示例:static get fullEndpoint() { return `${this.baseUrl}/v${this.version}`; }
配合静态方法做配置校验与初始化
元数据不只是“放着看”,还可主动参与类行为控制:
- 提供
static validateConfig()检查必填字段或格式 - 用
static init()延迟加载外部配置(如从 JSON 文件读取后挂载为静态属性) - 子类可重写静态方法实现差异化配置策略,但注意静态属性本身不被继承——需显式调用
super或重新定义
注意继承与覆盖的边界
静态属性不会自动被子类继承,但可通过 constructor 或 static 方法显式处理:
- 子类声明同名静态属性会完全覆盖父类,不是合并
- 若需“继承+扩展”,建议父类提供
static defaults对象,子类在其基础上展开,而非直接覆盖原始字段 - 避免在静态属性中引用
this(ES6 类中this在静态上下文未定义),应使用类名或arguments.callee(不推荐)

















