在我希望在不修改其代码的情况下扩展的库中,几个类继承自同一个导入的类。在这种情况下BaseClass
我需要覆盖一个特定的方法。
- 在图书馆中:
import { BaseClass } from './base_class';
export class ClassA extends BaseClass {}
import { BaseClass } from './base_class';
export class ClassB extends BaseClass {}
…
- 在外部扩展中,我希望写:
import { BaseClass } from 'library';
export class ExtendedBaseClass extends BaseClass {
oneMethod() {
const data = BaseClass.prototype.oneMethod.call(this);
// make additional things with data
return data;
}
}
有没有办法让这个新ExtendedBaseClass
成为所有ClassX
的父母?至少在它们的新扩展和重新导出版本中,无需复制其内部代码。
有
没有办法让这个新
ExtendedBaseClass
成为所有ClassX
的父级?
不。
另一种方法是直接在基类上替换一个方法:
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