javascript - 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)
解决方案
您可以使用 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
推荐阅读
- javascript - 在 IIS 10 中将 HTTP 重定向到 HTTPS
- git - Git 更改仅在 Visual Studio 2019 的一个解决方案中未显示更改的文件
- r - 将 dotwhisker 的图例更改为自定义值 r
- validation - 通过短信验证网络表单中的手机号码
- pandas - 按时间戳类型的列名对df进行排序
- python - 使用 conda 进行全新 ubuntu 20.04 安装的 Segfault
- r - 使用 coord_polar 更改 Y 比例
- php - 在 profile.php 中显示登录用户的数据
- python - rpy2 pass : 在函数参数中
- dolphindb - 如何在 DolphinDB 中使用 cutPoints?