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

如何在静态方法中引用当前类?父类静态方法如何获取子类引用

如何在父类静态方法中获取调用它的子类引用

当然可以实现!在JavaScript中,当子类调用继承自父类的静态方法时,this关键字会直接指向调用该方法的子类构造函数,这正好解决你的需求。

具体实现方案

首先修正原代码中的继承错误(Driver应该继承AbstractPerson而非Person),然后在createFromPayload方法中直接用this获取当前调用的子类:

class AbstractPerson {
  static createFromPayload(payload) {
    // 这里的this就是调用该方法的子类(比如Driver)
    const ClassToUse = this;
    // 获取子类的静态fields属性
    const fields = ClassToUse.fields; 
    // 创建子类的新实例
    const result = new ClassToUse(); 

    // 利用fields从payload中赋值到实例
    fields.forEach(field => {
      if (payload[field] !== undefined) {
        result[field] = payload[field];
      }
    });

    return result;
  }
}

class Driver extends AbstractPerson {
  age = 0;
  firstName = '';
  lastName = '';
  static fields = ['age', 'firstName', 'lastName']
}

// 调用测试
const driver = Driver.createFromPayload({age: 30, firstName: 'John', lastName: 'Doe'});
console.log(driver); 
// 输出: Driver { age: 30, firstName: 'John', lastName: 'Doe' }

原理说明

  • JavaScript的静态方法会被子类继承,当子类调用这些静态方法时,方法内部的this会绑定到子类构造函数,而非父类。
  • 这样你不仅能拿到子类的引用,还能直接访问它的静态属性(比如fields),并创建子类的实例。

如果后续有其他子类(比如Passenger)继承AbstractPerson,同样可以直接调用createFromPayload方法,this会自动指向对应的子类,无需修改父类代码,完美适配多子类场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:14:57