javascript 是否支持抽象数据类型?
Is javascript support abstract data type?
javascript是否支持抽象数据类型?
我搜索了很多但没有找到任何答案。我认为它不支持对吗?
不,但你可以使用 new.target
:
模拟它(在 ES2015+ 中)
class Abstract {
constructor(value) {
if (new.target === Abstract) {
throw new Error("Abstract is abstract");
}
this.value = value; // Proof that if the check above is false,
// we *do* continue to set up the instance
}
}
class Concrete extends Abstract {
}
try {
const a = new Abstract(1);
console.log("Got Abstract instance, value = " + a.value);
} catch (e1) {
console.error(e1);
}
try {
const c = new Concrete(2);
console.log("Got Concrete instance, value = " + c.value);
} catch (e2) {
console.error(e2);
}
遗憾的是,这只会在尝试执行实例化的代码行运行时产生错误,而不是在 parsed/compiled.
时
TypeScript 是 JavaScript 的派生物,添加了类型检查和其他一些东西,具有 abstract classes 的概念,在 TypeScript 编译阶段(当 TypeScript被编译[或"transpiled"]到JavaScript);这些信息也可供 IDE 等用于即时反馈。
javascript是否支持抽象数据类型?
我搜索了很多但没有找到任何答案。我认为它不支持对吗?
不,但你可以使用 new.target
:
class Abstract {
constructor(value) {
if (new.target === Abstract) {
throw new Error("Abstract is abstract");
}
this.value = value; // Proof that if the check above is false,
// we *do* continue to set up the instance
}
}
class Concrete extends Abstract {
}
try {
const a = new Abstract(1);
console.log("Got Abstract instance, value = " + a.value);
} catch (e1) {
console.error(e1);
}
try {
const c = new Concrete(2);
console.log("Got Concrete instance, value = " + c.value);
} catch (e2) {
console.error(e2);
}
遗憾的是,这只会在尝试执行实例化的代码行运行时产生错误,而不是在 parsed/compiled.
时TypeScript 是 JavaScript 的派生物,添加了类型检查和其他一些东西,具有 abstract classes 的概念,在 TypeScript 编译阶段(当 TypeScript被编译[或"transpiled"]到JavaScript);这些信息也可供 IDE 等用于即时反馈。