ES6: クラス コンストラクター呼び出しの 'new' キーワードをバイパスする
ES6 では、クラス コンストラクターはクラス自体の本体として機能します。 。ただし、クラスを呼び出してインスタンスを作成する場合は、「new」キーワードを使用することが必須です。この要件により、クラス コンストラクターの呼び出し中に 'new' キーワードをバイパスできるかどうかという問題が生じます。
制限の背後にある根本的な理由を理解するには、クラス コンストラクターの性質を詳しく調べることが重要です。通常の関数とは異なり、クラスのコンストラクターはクラス定義の組み込み部分であり、クラスがインスタンス化されるときに常に実行されます。この動作は、クラスが本質的にコンストラクターであることに起因します。
そのため、'new' キーワードなしでクラスを呼び出そうとすると、次のエラーが発生します。
TypeError: Class constructors cannot be invoked without 'new'
エラー メッセージは正確です。強制された要件を反映しています。
「new」キーワードなしでクラスを呼び出すという目的の機能を実現するには、いくつかのアプローチが検討できます。
オプション 1: 通常の関数を使用する
クラスの代わりに、通常の関数を使用して同様の動作を実現できます。
function Foo(x) { if (!(this instanceof Foo)) return new Foo(x); this.x = x; }
オプション 2: 一貫した「新しい」キーワードの使用を強制する
クラスを呼び出すときに 'new' キーワードの一貫した使用を強制することは、引き続き有効なオプションです。
オプション 3: クラスのラップ
通常ラッパー関数は、常に「new」キーワードを使用してクラスを呼び出すことで、「new」呼び出しと「new」以外の呼び出しの両方を処理するように作成できます。
class Foo { constructor(x) { this.x = x; } } var _old = Foo; Foo = function(...args) { return new _old(...args) };
クラス コンストラクターの仕組みを理解し、代替アプローチを検討することによってを使用すると、開発者は ES6 クラス呼び出しの微妙な違いを効果的にナビゲートできます。
以上がガイドラインに従ったいくつかのタイトル オプションを次に示します。 オプション 1: 問題を強調する * ES6 クラス: 「new」なしでコンストラクターを呼び出すことはできますか? オプション 2: ソリューションに重点を置く * ワーカロウの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。