【发布时间】:2019-03-10 03:58:46
【问题描述】:
我有一个继承层次结构,其中对象可以通过各种构造函数提供的一些值和一些默认值正常构造,也可以从提供所有值的序列化形式构造。我想用我在每个类上定义的静态工厂方法来处理序列化表单的构造。像这样:
class A {
constructor(x: number) {
this.x = x;
}
static fromValues(v: {x: number}) {
return new A(v.x);
}
}
class B extends A {
constructor(y: number) {
super(0);
this.y = y;
}
static fromValues(v: {x: number, y: number}) {
// what goes here
}
}
class C extends B {
constructor(z: number) {
super(0, 1);
this.z = z;
}
static fromValues(v: {x: number, y: number, z: number}) {
// what goes here
}
}
问题是:如何实现这些方法?此外,他们最好将一些工作交给超类静态工厂方法。
【问题讨论】:
-
唯一可行的方法是独立创建每个对象并手动创建层次结构,然后设置每个
__proto__。您显然无法使用new创建实例,因为您已经在super()调用中硬编码了值。 -
所以,我想也许真正的问题是:我应该如何处理这种整体模式? (忽略示例代码)即使我将构造函数切换为接受序列化表单并让静态工厂生成默认对象,如果我希望默认值留在与它们相关的类旁边,我想我仍然会遇到同样的问题。
-
请看我的回答。如果没有代码,这是一个非常固执己见的话题。但你会在下面看到它的工作原理。
标签: javascript typescript inheritance