私にとって、クラスは NodeJS (CommonJS) モジュールに非常に似ています。それらの多くを持つことができ、それらは再利用でき、相互に使用でき、通常はファイルごとに 1 つです。
モジュールとクラスの違いは何ですか? それらの使用方法は異なり、名前空間の違いは明らかです。それに加えて、それらは私には非常に同じように見えるか、おそらくここで明らかな利点が見られないだけです.
モジュールは、クラスよりもパッケージ (Java 用語を使用する場合) に似ています。モジュールをインスタンス化しません。そのコピーは 1 つだけです。これは関連する機能を整理するためのツールですが、通常、オブジェクトの特定のインスタンスのデータをカプセル化するわけではありません。
おそらくクラスに最も近い類似物は (実際に JavaScript でクラスベースの継承を構築するライブラリは別として)、単なるコンストラクター関数です。もちろん、そのような関数をモジュール内に配置することもできます。
function Car() {
this.colour = 'red';
}
Car.prototype.getColour = function() { return this.colour; };
var myCar = new Car();
myCar.getColour(); // returns 'red'
カプセル化にはモジュールとクラスの両方を使用しますが、そのカプセル化の性質は異なります。
JS は当初、プロトタイプの継承システムでした。他の言語と同様に非常にシンプルでした。しかしその後、Netscape はそれをより Java に近づけることを決定し、言語にコンストラクターのアイデアを追加しました。したがって、疑似クラスが生まれました。このリンクをチェックして、プロトタイプ OOP が JS でどのように使用されているかを確認できます: http://howtonode.org/prototyp-inheritance
1つの重要なこと。その「通常、ファイルごとに1つ」ということは真実ではありません。モジュールは絶対にファイルごとに 1 つです。require()
モジュールを名前空間に持ち込む には、そのモジュールのエクスポートexports
されたコンテンツを区別する方法がありません。モジュール (ファイル) がエクスポートするものはすべてrequire()
ステートメントでインポートされます。複数のモジュールをファイルに入れようとしても、「いずれかの」モジュールをロードしようとすると、そのファイル内のすべてが取得されるだけです。