// A convenient function that can be used for any abstract method
function abstractmethod() { throw new Error("abstract method"); }
// The AbstractSet class defines a single abstract method, contains().
function AbstractSet() { throw new Error("Can't instantiate abstract classes");}
AbstractSet.prototype.contains = abstractmethod;
来自“Javascript:The Definitive Guide - 9.7.4 Class Hierarchies and Abstract Classes” 我理解JavaScript中抽象类的实用性。我不明白的是设置只引发错误的抽象方法的必要性或用法。您无法创建该类的实例,因此只存在子类的实例。它们每个都有自己的定义这些方法,那么为什么要建立一个只抛出一般错误的方法的继承呢?
提前感谢您的指导性回应。
答案 0 :(得分:3)
我认为这样做的目的是它不是一般错误 - 这是一个错误,通知你出错的地方(即你没有覆盖子类中的方法)。如果你没有定义那个方法,你会得到一个错误,说“未定义不是一个函数”(或类似的东西),你必须花时间搜索你的代码来理解为什么 - 这样它就失败了冗长而有用的方式。
我认为另一个原因是为下游开发人员实现子类的类接口。 Javascript没有任何形式的接口声明,因此能够检查抽象类并查看我期望实现的方法是有帮助的。