ES6 では、匿名クラスを定義する機能により、クラス宣言の糖衣構文が提供されます。このようなクラスの即時インスタンス化は便利ですが、多くの問題を引き起こす可能性があります。
匿名クラスが即時にインスタンス化されると、JavaScript は新しいコンストラクター関数を作成し、プロトタイプオブジェクトを動的に作成します。式の各評価の結果、個別のコンストラクター関数とプロトタイプが生成されます。
この方法には、いくつかの重大な欠点があります。
再利用性の欠如:
名前付きクラスとは異なり、すぐにインスタンス化される匿名クラスは、毎回新しいコンストラクターとプロトタイプを作成します。これは、複数のインスタンスが同じプロトタイプを共有しないことを意味し、クラス継承とプロトタイプ共有の利点が失われます。
シングルトンの誤謬:
このパターンを使用する意図が、シングルトンオブジェクトの場合は失敗します。コンストラクター関数は引き続きアクセス可能なため、 newentity.constructor.
を使用して複数のインスタンスを作成できます。コンセンサスは明らかです。すぐにインスタンス化される匿名クラスは避けるべきです。単純なオブジェクト リテラルは、より効率的で簡単な代替手段を提供します。
var entity = { name: 'Foo', getName: function() { return this.name; } };
新しいクラス パターンは他の一部の言語では受け入れられますが、JavaScript では動作が異なります。 JavaScript のクラス作成の動的な性質により、これらの言語が享受できる利点が失われます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3