ES6 では、匿名クラスを定義する機能により、クラス宣言に糖衣構文が提供されます。このようなクラスの即時インスタンス化は便利ですが、多くの問題を引き起こす可能性があります。
匿名クラスが即時にインスタンス化されると、JavaScript は新しいコンストラクター関数を作成し、プロトタイプオブジェクトを動的に作成します。式の各評価の結果、個別のコンストラクター関数とプロトタイプが生成されます。
この方法には、いくつかの重大な欠点があります。
再利用性の欠如:
名前付きクラスとは異なり、すぐにインスタンス化される匿名クラスは、毎回新しいコンストラクターとプロトタイプを作成します。これは、複数のインスタンスが同じプロトタイプを共有しないことを意味し、クラス継承とプロトタイプ共有の利点が失われます。
シングルトンの誤謬:
このパターンを使用する意図が、シングルトンオブジェクトの場合は失敗します。コンストラクター関数はアクセス可能なままであり、newentity.constructor を使用して複数のインスタンスを作成できます。
コンセンサスは明らかです。すぐにインスタンス化される匿名クラスは回避する必要があります。単純なオブジェクト リテラルは、より効率的で直接的な代替手段を提供します。
var entity = { name: 'Foo', getName: function() { return this.name; } };
新しいクラス パターンは他の一部の言語では受け入れられますが、JavaScript では動作が異なります。 。 JavaScript のクラス作成の動的な性質により、これらの言語が享受できる利点が失われます。
以上がES6 で即座にインスタンス化される匿名クラスは悪い考えですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。