ES6 では、プログラマーは class キーワードを使用して匿名クラスを定義し、新しい演算子を使用して即座にインスタンス化できます。
<code class="javascript">var entity = new class { constructor(name) { this.name = name; } getName() { return this.name; } }('Foo');</code>
これは便利に見えるかもしれませんが、その根本的な動作と潜在的な欠点を理解することが重要です。
舞台裏では、新しいクラス式は新しいコンストラクターを作成します関数とプロトタイプ オブジェクトが評価されるたびに生成されます。これは、すべてのインスタンス間で共有される単一のコンストラクターとプロトタイプを定義する通常のクラス宣言とは異なります。
a。過剰なメモリ消費:
即時インスタンス化では、新しいクラス式を使用してオブジェクトが作成されるたびに、新しいコンストラクターとプロトタイプが作成されます。これにより、特に多数のオブジェクトがインスタンス化される場合、不必要なメモリ消費が発生する可能性があります。
b.継承の欠如:
新しいクラス パターンを使用して作成されたオブジェクトは、親コンストラクターから継承せず、共通のプロトタイプを共有しません。したがって、継承、メソッドの再利用、ポリモーフィズムなどのクラスの利点が失われます。
一部の開発者はこのパターンを使用してシングルトン オブジェクトを作成することがありますが、効果的ではありません。コンストラクター関数には引き続きアクセスでき、シングルトンの目的に反して新しいentity.constructorを使用して2番目のインスタンスを作成できます。
これらの欠点があるため、使用しないことを強くお勧めします。新しいクラスパターンを使用します。代わりに、単純さ、読みやすさ、インスタンス化の効率を考慮して、従来のオブジェクト リテラルを優先してください:
<code class="javascript">var entity = { name: 'Foo', getName() { return this.name; } };</code>
以上が匿名クラス インスタンスの落とし穴: この JavaScript の落とし穴をいつ、どのように回避するか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。