我有一个实现一堆方法的基类,每个方法都返回一个对对象副本的新引用以允许链接。
class Base {
constructor(public name: string) {}
funcA(): Base { return new Base('FUNC_A') }
funcB(): Base { return new Base('FUNC_B') }
}
另外,我有一个派生类,只暴露了基类的一些方法,也暴露了它自己的方法。所有这些方法都应该返回对派生类对象的引用以允许链接。
class Derived extends Base {
constructor() { super('DERIVED') }
funcA(): Derived { return super.funcA() }
newFunc(): Derived { return new Derived() }
}
在这种情况下,我遇到了问题。被覆盖的方法返回的对象仍然是基类的一个实例,不管它是否被强制转换为派生类,派生类中第一次定义的方法都没有被定义。
我想到了一种解决方法,它并不优雅。代替继承,我可以使用组合在派生类对象中包含基类对象的实例。但是,为此,我需要一个额外的构造函数来接受一个基类对象,该对象应该可以在类外部访问,并像funcA(): Derived { return new Derived(this.baseObject) }
.
有没有更优雅的方法来解决这个问题?