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

JavaScript:如何引用子类化(可能已被重写)的静态属性

解决JavaScript类实例方法访问最近静态变量的问题

问题原因

你代码里的this.foo返回undefined,是因为this指向实例对象,而foo是类的静态属性(属于类本身,不属于实例),实例上并没有foo属性,所以找不到。

解决方案

在实例方法中,通过this.constructor获取当前实例所属的类,再访问该类的静态属性foo。this.constructor会自动指向创建实例的类(父类或子类),沿着原型链找到最近的静态foo,完全不需要硬编码类名,支持子类扩展。

修正后的代码

class A {
   static foo = "default"
   run() {
      console.log(this.constructor.foo)
   }
}

class B extends A {   
}

class C extends A {
   static foo = "overridden"   
}

const a = new A()
a.run()  // 输出 "default"

const b = new B()
b.run()  // 输出 "default"

const c = new C()
c.run()  // 输出 "overridden"

补充说明

如果遇到子类手动修改了constructor属性的极端情况,可以用Object.getPrototypeOf(this).constructor来确保获取正确的类,但绝大多数场景下this.constructor已经足够可靠。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 01:31:22