Это очень самоуверенная тема (фабрики в JavaScript).Решение ниже предоставляется в натуральной форме (написано как ваш вопрос), чтобы дать прямой ответ без мнения о других методах.
Примечание наборы удалены из-за ограничений инструмента сниппета.
Изменения включают добавление значений по умолчанию в список параметров конструктора.Это позволяет удалить жестко закодированные значения и при необходимости предоставить значения для конструкторов подкласса.Кроме того, по умолчанию требуются значения по умолчанию в ваших статических методах.
Это позволяет создавать отдельные объекты или всю иерархию либо с помощью статического фабричного метода, либо с помощью ключевого слова new
.
class A {
constructor(x = 0) {
this.x = x;
}
static fromValues(v = {x:0}) {
return new A(v.x);
}
}
class B extends A {
constructor(y = 0, x) {
super(x);
this.y = y;
}
static fromValues(v = {y:0, x:0}) {
return new B(v.y, v.x)
}
}
class C extends B {
constructor(z = 0, y, x) {
super(y, x);
this.z = z;
}
static fromValues(v = {z:0, y:0, x:0}) {
return new C(v.z, v.y, v.x);
}
}
const a = A.fromValues({x: 3});
const b = B.fromValues({y: 2,x: 3});
const c = C.fromValues({z: 1,y: 2,x: 3});
const nv = C.fromValues();
console.log("A", a);
console.log("B", b);
console.log("C", c);
console.log("No Values", nv);