破解导入语句以扩展继承的类



在我希望在不修改其代码的情况下扩展的库中,几个类继承自同一个导入的类。在这种情况下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

相关内容

  • 没有找到相关文章

最新更新