首页 > 解决方案 > JS 类抽象

问题描述

我一直在尝试创建一个可以修改继承类中的变量的抽象类,但是当我在继承类中设置一个空变量时,我遇到了一个问题,抽象类不会设置它?

这个例子不工作

class Abc {
  constructor() {
    this.id = "x";
  }
}
class Test extends Abc {
  id;
}

const test = new Test();
console.log(test)

这个例子可以工作

class Abc {
  constructor() {
    this.id = "x";
  }
}
class Test extends Abc {
}

const test = new Test();
console.log(test)

标签: javascriptecmascript-6es6-class

解决方案


您可以使用 undefined 将它们初始化为您的 id,但也可以在构造函数中将其设置为可选字段,以防您想在创建实例时进行设置。

JS 中不能有抽象类,但可以添加一个简单的验证来防止直接实例化:

class AbstractClass {
  constructor(id = undefined) {
    if (new.target.name === AbstractClass.name) {
      throw new Error("Can not create instance of Abstract class");
    }
    this.id = id;
  }
}

class DerivedClass extends AbstractClass {}

const disallowed = new AbstractClass(); // throws error 
const allowed = new DerivedClass(1); // will work fine

推荐阅读