Help us understand the problem. What is going on with this article?

TypeError: Class constructor cannot be invoked without 'new'

More than 1 year has passed since last update.

const class

エラーの出たJavaScript
const A = class {
  constructor(_a) {
    this.a = _a;
  }
}

const B = class extends A {
  constructor(_b) {
    super(_b);
  }
}

(() => {
  var b = new B("test");
  console.log(b);
})();

とあるJavaScriptを試したところ「TypeError: Class constructor cannot be invoked without 'new'」が出た。

エラーの原因は何? :thinking:

普通のclass

エラーの出ないJavaScript
class A {
  constructor(_a) {
    this.a = _a;
  }
}

class B extends A {
  constructor(_b) {
    super(_b);
  }
}

(() => {
  var b = new B("test");
  console.log(b);
})();

普通によく見るclassならエラーが出ない。

判明した原因とは

原因

const B = class extends A {}()

後ろの無名関数の即時関数とくっついてnew A()し損ねたと判定された。

constの後ろに「;」をつけてやれば解決。


提案

const classを使わないようにしよう。
知らないだけかもだがあまり見ないと思う :unamused:

「;」を省略しないようにしよう。
ブックマークレットが動かなくなるし今回のようなこともある。

自戒と反省を込めて :relaxed:

querykuma
一番好きな関数はJavaScriptのquerySelectorAllです。
https://querykuma.github.io/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away