ホームページ >ウェブフロントエンド >jsチュートリアル >「new」キーワードを使用せずに ES6 クラス コンストラクターを呼び出すにはどうすればよいですか?

「new」キーワードを使用せずに ES6 クラス コンストラクターを呼び出すにはどうすればよいですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-10-26 02:27:27617ブラウズ

How Can I Call an ES6 Class Constructor Without the

「new」なしで ES6 クラス コンストラクターを呼び出す

ES6 では、クラスはコンストラクター関数の糖衣構文です。 new キーワードを指定せずにクラスを呼び出した場合、クラスの新しいインスタンスは作成されません。代わりに、クラスのコンストラクター関数を直接呼び出します。

次のクラスについて考えます:

<code class="javascript">class Foo {
  constructor(x) {
    if (!(this instanceof Foo)) return new Foo(x);
    this.x = x;
  }
  hello() {
    return `hello ${this.x}`;
  }
}</code>

new キーワードなしでこのクラスを呼び出そうとすると、エラーが発生します:

Cannot call a class as a function

これは、クラス コンストラクターがクラスの新しいインスタンスを作成するように設計されているためです。 new 演算子を使用せずにそれらを呼び出すことは、通常の関数を呼び出すことと同じです。

new キーワードなしでクラス コンストラクターを呼び出せるようにするには、次のようにコンストラクター関数とアロー関数を組み合わせて使用​​できます。

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

const FooWithoutNew = () => new Foo(...arguments);</code>

これで、FooWithoutNew を使用して new キーワードなしでクラス コンストラクターを呼び出すことができます。

FooWithoutNew("world").hello(); // "hello world"

ただし、このアプローチにはいくつかの欠点があることに注意することが重要です。まず、別の関数を作成する必要があるため、不便な場合があります。次に、新しいインスタンスを返すコンストラクターの動作が壊れます。

一般に、明確さと一貫性のために、常に new キーワードを使用してクラス コンストラクターを呼び出すことをお勧めします。

以上が「new」キーワードを使用せずに ES6 クラス コンストラクターを呼び出すにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。