web-dev-qa-db-ja.com

NodeJSモジュールとクラス

私にとって、クラスはNodeJS(CommonJS)モジュールと非常によく似ています。それらの多くを使用でき、再利用でき、相互に使用でき、通常はファイルごとに1つです。

モジュールとクラスの違いは何ですか?それらの使用方法は異なり、名前空間の違いは明らかです。それに加えて、それらは私にはほとんど同じように見えるか、おそらく私はここで明らかな利点を見ていません。

20
Tower

モジュールは、クラスというよりもパッケージに似ています(Java termを使用))。モジュールをインスタンス化するのではなく、モジュールのコピーは1つだけです。これは、関連する機能を整理するためのツールですが、通常、オブジェクトの特定のインスタンスのデータをカプセル化しません。

おそらく、クラスに最も近い類似物(JavaScriptでクラスベースの継承を実際に構築するライブラリは別として)は、単なるコンストラクター関数です。もちろん、そのような関数をモジュール内に配置することもできます。

function Car() {
    this.colour = 'red';
}
Car.prototype.getColour = function() { return this.colour; };

var myCar = new Car();
myCar.getColour(); // returns 'red'

カプセル化にはモジュールとクラスの両方を使用しますが、そのカプセル化の性質は異なります。

22
Jeremy Roman

JSは当初、プロトタイプの継承システムでした。他の言語と同じようにとてもシンプルでした。しかしその後、NetscapeはそれをJavaのようにすることを決定し、コンストラクターのアイデアを言語に追加しました。したがって、疑似クラスが生まれました。このリンクをチェックして、プロトタイプOOPはJSで使用されます: http://howtonode.org/prototypical-inheritance

2
Aymen Mouelhi

重要なことの1つ。 「一般的にファイルごとに1つ」ということは真実ではありません。モジュールは絶対にファイルごとに1つです。モジュールのexportsを名前空間に取り込むrequire()には、そのモジュールのエクスポートされたコンテンツを区別する方法がありません。モジュール(ファイル)がエクスポートするものはすべて、require()ステートメントでインポートされます。複数のモジュールをファイルに入れようとすると、「どちらかの」モジュールをロードしようとしたときに、そのファイルにすべてが含まれることを意味します。

0
Paul Sonier