ECMAScript 6是否有抽象类的约定?[重复]

2020/10/24 06:21 · javascript ·  · 0评论

当我在阅读ES6时找不到任何有关抽象类的东西时,我感到很惊讶。(通过“抽象类”,我在谈论它的Java含义,其中抽象类声明子类必须实现才能实例化的方法签名)。

有谁知道在ES6中实现抽象类所采取的约定?能够通过静态分析捕获抽象类冲突将是很好的。

如果我在运行时引发错误以发出尝试抽象类实例化的信号,那么错误将是什么?

ES2015没有带有内置功能的Java样式类来满足您所需的设计模式。但是,它有一些选项可能会有所帮助,具体取决于您要完成的工作。

如果您想要一个无法构造但其子类可以构造的类,则可以使用new.target

class Abstract {
  constructor() {
    if (new.target === Abstract) {
      throw new TypeError("Cannot construct Abstract instances directly");
    }
  }
}

class Derived extends Abstract {
  constructor() {
    super();
    // more Derived-specific stuff here, maybe
  }
}

const a = new Abstract(); // new.target is Abstract, so it throws
const b = new Derived(); // new.target is Derived, so no error

有关的更多详细信息new.target,您可能需要阅读以下有关ES2015中的类如何工作的一般概述:http ://www.2ality.com/2015/02/es6-classes-final.html

如果您特别希望实现某些方法,则也可以在超类构造函数中进行检查:

class Abstract {
  constructor() {
    if (this.method === undefined) {
      // or maybe test typeof this.method === "function"
      throw new TypeError("Must override method");
    }
  }
}

class Derived1 extends Abstract {}

class Derived2 extends Abstract {
  method() {}
}

const a = new Abstract(); // this.method is undefined; error
const b = new Derived1(); // this.method is undefined; error
const c = new Derived2(); // this.method is Derived2.prototype.method; no error
本文地址:http://javascript.askforanswer.com/ecmascript-6shifouyouchouxiangleideyuedingzhongfu.html
文章标签: ,   ,   ,  
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!

文件下载

老薛主机终身7折优惠码boke112

上一篇:
下一篇:

评论已关闭!