You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何无法在JavaScript类的静态初始化块中设置构造函数name属性?

类静态字段与静态初始化块修改name属性的差异是规范预期行为吗?

这是ECMAScript规范的预期行为,并非意外特性,核心原因在于两者的执行时机和规范对name属性的只读标记时机不同:

  • 类构造函数的name属性本质是只读的,但静态字段的初始化时机更早:在类构造函数被创建后、name属性被标记为只读之前,静态字段就已经完成赋值。此时修改name相当于覆盖默认值,不会触发只读限制。
  • 静态初始化块则是在所有静态字段初始化完成后才执行的,这时构造函数的name属性已经被规范设置为只读状态,直接赋值自然会抛出TypeError。

可行代码示例

class Foo {
  static name = 'Bar';
}
console.log(Foo.name); // 输出 "Bar"

报错代码示例

class Foo {
  static {
    this.name = 'Bar';
  }
}
// 抛出 TypeError: Cannot assign to read only property 'name' of function 'Foo()'

内容的提问来源于stack exchange,提问作者Ryan Grove

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 16:44:50