如何在静态方法中引用当前类?父类静态方法如何获取子类引用
如何在父类静态方法中获取调用它的子类引用
当然可以实现!在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
相关产品推荐
相关产品推荐

