「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > ES6 では「new」なしでクラス コンストラクターを呼び出すことができますか?

ES6 では「new」なしでクラス コンストラクターを呼び出すことができますか?

2024 年 11 月 7 日に公開
ブラウズ:345

 Can You Call a Class Constructor Without \'new\' in ES6?

ES6 の新しいキーワードなしでクラス コンストラクターを呼び出す

クラス定義を指定すると:

class Foo {
  constructor(x) {
    if (!(this instanceof Foo)) return new Foo(x);
    this.x = x;
  }
  hello() {
    return `hello ${this.x}`;
  }
}

new キーワードなしでクラス コンストラクターを直接呼び出すことはできません。これは、ES6 のクラスには、クラスが呼び出されたときに呼び出されるコンストラクター関数が本質的にあるためです。

新しい結果を持たずにクラスを呼び出すと、エラーが発生します:

Cannot call a class as a function

このエラー メッセージは、クラス コンストラクターは、クラスの新しいインスタンスを作成するために必要な new 演算子でのみ呼び出すことができることを明確に示しています。

この制限を克服するには、次のアプローチを検討してください。 :

  • 代わりに通常の関数を使用します:
function Foo(x) {
  this.x = x;
  this.hello = function() {
    return `hello ${this.x}`;
  }
}
  • 常に new:
(new Foo("world")).hello(); // "hello world"
  • クラスを関数でラップし、 new:
var FooWrapper = function(...args) { return new Foo(...args) };
FooWrapper("world").hello(); // "hello world"
最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3