【发布时间】:2015-06-11 09:35:10
【问题描述】:
我很惊讶在阅读 ES6 时找不到任何关于抽象类的信息。 (我所说的“抽象类”是指它的 Java 含义,其中抽象类声明子类必须实现的方法签名才能实例化)。
有谁知道在 ES6 中实现抽象类的任何约定?如果能够通过静态分析捕获抽象类违规,那就太好了。
如果我在运行时引发错误以表示尝试抽象类实例化,那么错误会是什么?
【问题讨论】:
-
ES6 不会改变早期 JavaScript 版本的基本原型继承机制。 “抽象类”的概念在 JavaScript 术语中并没有多大意义,尽管预处理器类型语言当然可以实现这样的东西。
-
由于 javascript 不是强类型的抽象类不会有用。
-
抽象类,以及特征和混合,是一个待定的"strawman"proposal。
-
@gorgi93 - 抽象类与强类型无关。自 1970 年代以来,像 Smalltalk 这样的动态类型语言就有抽象类(按照惯例)。
-
(晚会)我同意你的观点,这不是一个重复的问题。即使它是同一只野兽,它也会经常被问到。 JS 类有点类似于 ruby 的类。如果没有实现,我使用类似的方法抛出错误,但不检查实例化(许多 ruby 开发人员也这样做)。在我看来,这是清晰的代码。创建一个 NotImplementedClass (second answer)。然后在你的基类
mymethod(){throw new NotImplementedError()}
标签: javascript oop abstract-class ecmascript-6