Javascript 修改import语句以扩展继承的类

Javascript 修改import语句以扩展继承的类,javascript,typescript,ecmascript-6,javascript-import,Javascript,Typescript,Ecmascript 6,Javascript Import,在我希望在不修改代码的情况下扩展的库中,有几个类继承自同一个导入的类。也就是说,在这个基类中,我需要覆盖一个特定的方法 在库中(用TypeScript编写): 从'/base_class'导入{BaseClass}; 导出类ClassA扩展基类{} 从'./base_class'导入{BaseClass}; 导出类ClassB扩展基类{} … 在外部扩展中,我想写: 从“库”导入{BaseClass}; 导出类ExtendedBaseClass扩展BaseClass{ oneMetho

在我希望在不修改代码的情况下扩展的库中,有几个类继承自同一个导入的类。也就是说,在这个
基类中,我需要覆盖一个特定的方法

  • 在库中(用TypeScript编写):
从'/base_class'导入{BaseClass};
导出类ClassA扩展基类{}
从'./base_class'导入{BaseClass};
导出类ClassB扩展基类{}
…
  • 在外部扩展中,我想写:
从“库”导入{BaseClass};
导出类ExtendedBaseClass扩展BaseClass{
oneMethod(){
const data=BaseClass.prototype.oneMethod.call(this);
//用数据做额外的事情
返回数据;
}
}
有没有办法让这个新的
ExtendedBaseClass
成为所有
ClassX
s的父类?至少在新的扩展和重新导出版本中,无需复制其内部代码

有没有办法让这个新的
ExtendedBaseClass
成为所有
ClassX
s的父类

没有

另一种方法可能是直接在基类上替换one方法:

import { BaseClass } from 'library';

const oneMethod = BaseClass.prototype.oneMethod;

Object.defineProperty(BaseClass.prototype, 'oneMethod', {
    value() {
         const data = oneMethod.call(this);
         // make additional things with data
         return data;
    },
});

没有办法完全满足您的要求,但是您可以通过单独扩展每个类来实现相同的结果

ExtendedClassA extends ClassA {
  oneMethod() {
    // call a shared method if you need to reuse
  }
}

// ExtendedClassB, etc

不幸的是,我不能更改库的基本代码,只能四处写。这确实是我能想到的最小更改的替代方案。谢谢。是的,它不会改变上部原型,但需要在所有原型上应用它。我会记住这一点,谢谢。正确的,根据您可能需要的类的数量,比如@Ry-建议的再次思考,上层原型的更改实际上是一件好事:对于
ClassA
已经扩展了此方法的情况,它需要通过其原型访问新方法。如果在
ExtendedClassA