具有不同名称但扩展相同类的多个类

时间:2021-01-28 23:45:48

标签: javascript typescript class oop

例如我有这个类:

abstract class MyClass {
  abstract myProp: number;

  constructor() {
    // Some code
  }
}

所以我想创建多个扩展这个类的类。但我不想重复多次,因为我会有很多课程。所以目的是每个类都有不同的名字和myProp。

例如:

class FirstClass extends MyClass {
  myProp = 1;
  constructor() {
    super();
    // Some code
  }
}

class SecondClass extends MyClass {
  myProp = 2;
  constructor() {
    super();
    // Some code
  }
}

所以我想生成这些类(例如一个函数),但问题是我必须使用 new 关键字。 所以每个类的用法应该是这样的:

const myConst = new FirstClass();
const myConst2 = new SecondClass();

我希望这有点道理。我只是不想重复每个类,因为它有不同的名称和 myProp。

2 个答案:

答案 0 :(得分:2)

您可以通过返回匿名类的函数创建类。

const createClass = ( prop: number ) => {
    return class extends MyClass {
        myProp: number;

        constructor () {
            super();
            this.myProp = prop;
        }
    }
}

const FirstClass = createClass(1);

const x = new FirstClass();
console.log(x.myProp);

或者查看这些问题的答案以获得想法:

答案 1 :(得分:0)

如果我正确理解您的问题,您可以在构造函数中传递不同的变量作为参数。

class MyClass {
  myProp: number;

  constructor(myProp: number) {
    this.myProp = myProp
    // Some code
  }
}

然后创建你想要的类实例。

const myConst = new MyClass(1);
const myConst2 = new MyClass(2);

就我个人而言,如果我想添加一些不共享的方法或属性,我只会扩展一个类。由于 myProp 存在于两个类中,因此最好将值传递给构造函数。