78

モジュール パターンまたはコンストラクター/protoType パターンが自分の作業により適しているかどうかを知りたいです。

基本的に、目立たない JavaScript を使用しています。HTML ドキュメントには .js ファイルへの参照があります。

モジュールパターンの私の理解:

  • INIT メソッドを呼び出します (これは基本的に、モジュール パターンを使用して作成および返すことができるパブリック メソッドです)
  • INIT メソッドでは、すべてのクリック イベントなどを割り当てます。

オブジェクトや継承階層などを作成する必要がないため、これは私の状況に最適なパターンのように思えます。

コンストラクター/プロトタイプパターンの私の理解:

  • オブジェクトの作成用
  • 継承を使用するため (つまり、スーパータイプのサブタイプ)

目立たない JavaScript を提供するには、モジュール パターンが理想的であるというのは正しいですか?

4

3 に答える 3

70

コンストラクター関数とプロトタイプは、クラスとインスタンスを実装する合理的な方法の 1 つです。それらはそのモデルに完全に対応していないため、通常、プロトタイプの観点からクラスを実装するには、特定のスキームまたはヘルパー メソッドを選択する必要があります。( JS のクラスに関するいくつかの背景。)

モジュール パターンは通常、関連する関数とオブジェクトをグループ化するためのストアとして機能する単一のインスタンスを持つ名前空間に使用されます。これは、プロトタイピングが得意とするユースケースとは異なります。彼らは実際には互いに競合していません。両方をうまく一緒に使うことができます (例えば、モジュール内にコンストラクター関数を入れて と言うnew MyNamespace.MyModule.MyClass(arguments))。

于 2010-09-24T21:16:14.893 に答える
13

モジュール パターンは、プロトタイプよりもはるかに簡単でエレガントです。ただし、モバイルを第一に考えてください。初期化は開始前にブロック全体を解析する必要があるため、中規模/大規模なオブジェクトに関連するパターンではありません。複数のクロージャーは、ガベージ コレクター (特に IE) が解放しない循環依存関係も作成します。その結果、ウィンドウ (またはタブ) が閉じられるまで解放されないメモリ フットプリントが大きくなります - クロム タスク マネージャーをチェックして比較してください - ロード時間は逆ですモジュールパターンを使用してオブジェクトサイズに比例しますが、これはプロトタイプの継承には当てはまりません。上記のステートメントは、次のような複数のベンチマークによって検証されています: http://jsperf.com/prototypal-performance/54

最後のテストで見たように。小さなオブジェクトは、プレーン オブジェクト (これらのパターンなし) として初期化する方が適切です。クロージャーも継承も必要としない単一のオブジェクトに適しています。これらのパターンが必要かどうかを評価することは賢明です。

于 2012-12-03T17:04:42.067 に答える