右。これが私がこれをどのように見るかです。何よりもまず、@ keetoからの引用:
上品な滞在
''最後の部分は重要です。クラスはモジュラーコードを実装するための非常に優れた方法ですが、それを実行する唯一の方法ではありません。最近、一部の開発者がすべてにクラスを使用するという不快な傾向があることがわかりました。ことわざのハンマーのように、クラスはすべてのコーディングネイルに使用されています。これは、すべてのものがクラスであるとは限らないため、残念なことです。
クラスは、プロジェクト全体で使用できる再利用可能なコードを作成するのに最適であり、私は個人的にその基準に固執しています。私が作成しているものが複数回使用されることが確実でない限り、それをクラスに変換することはありません。また、気づかなかった場合は、単一のカスタムクラスを定義しなくてもMooToolsを使用できます。結局のところ、MooToolsにクラスがあるからといって、JavaのようにJavaScriptでコーディングする必要があるわけではありません。* ''
ソース: http: //keetology.com/blog/2010/10/01/modules-and-callbacks-going-hollywood-with-mootools
これは、クラスとJavaScriptの一般的な記述方法に大きく依存するため、非常に主観的です。
クラスの使用には、ペナルティとオーバーヘッドがないわけではありません。インスタンス化するクラスのタイプに応じて、これは異なります。たとえば、クラスが他のオブジェクトに触れたりDOMに出力したりしない単純なデータ抽象化である場合、インスタンスを作成するのは比較的安価です。コストは、オプションオブジェクトの処理と、(場合によっては)インスタンスコンストラクターへのプロパティのコピーに関連します。
initialize
クラス定義自体の間に、MooToolsはすべてのコンストラクターオブジェクトプロパティをループし、すべての特別なプロパティとミューテーター(たとえば、、、、、(from -more)など)を処理しようとImplements
しExtends
ますbinds
。ただし、これは1回限りです。コンストラクター関数が作成されると、それをすばやく使用できます。
また、他のことも行います。関数値を持つすべてのプロパティをラップして、(.protect()
現在のAPIを介して)プライベートとして装飾できるようにします。これにより、実行するすべての関数がカレーされます。.bind()
さらに、メソッドデコレータとしても使用する傾向があります。つまり、実行される実際のコードのラッパーが2つあります。
クラスが複雑になるほど(さまざまなクラスプロトからの拡張と実装)、クラスのインスタンスの作成により多くの作業が必要になる可能性があります。実際には、これをメモリ割り当て(開始またはガベージコレクションの遅延)以外のものとして認識し始めるには、絶対モンスターを作成する必要があります。もちろん、コンストラクター関数のCPUヘビーまたは非同期/ブロッキングのものも、たくさん行うといいでしょう...
イベント、イベントリスナーなども積み重なる可能性があります。保存されたオブジェクトへの参照は、時間の経過とともに積み重なっていきます。
次に、DOM要素にバインドし、イベントを追加し、イベントをリッスンし、独自のイベントをエクスポートするクラスがあります...
すべてをまとめると、いくらかコストがかかる可能性があります。多くの場所から(できればプロトタイプチェーンを介した参照によって)継承するオブジェクトを作成しています。それでも、クラスコンストラクター自体の定義は高速であり、何千ものインスタンスを作成して初めて、物事が面白くなり、最新のブラウザーをテストできるようになります。