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