2011-08-02 169 views
19

對於我來說,類與NodeJS(CommonJS)模塊非常相似。你可以有很多,可以重用,可以互相使用,通常每個文件一個。NodeJS模塊vs類

是什麼使模塊與類不同?你使用它們的方式不同,命名空間的差異很明顯。除此之外,他們對我來說看起來非常相似,或者我只是沒有在這裏看到明顯的好處。

+0

什麼令我着迷是使Node.js服務器上的基準 - CommonJS的模塊VS ECMAScript的6類 –

回答

21

模塊更像是類(使用Java術語)比類。你沒有實例化一個模塊;它只有一個副本。它是用於組織相關功能的工具,但通常不會封裝特定對象實例的數據。

可能是與類最接近的類似物(拋開那些實際在JavaScript中構造基於類的繼承的庫)只是一個構造函數。您當然可以將這些功能放入模塊中。

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

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

您使用模塊和類進行封裝,但封裝的性質是不同的。

0

一件重要的事情; 「通常每個文件一個」的事情是不正確的;模塊絕對是每個文件一個。將模塊的exports帶入命名空間的require()無法區分該模塊的導出內容;使用require()語句導入模塊(文件)導出的所有內容。試圖將多個模塊放入文件只意味着當您嘗試加載「任一」模塊時,您將在該文件中獲得所有內容。

1

JS最初是一個原型遺傳系統。像其他語言一樣,它非常簡單。但是後來Netscape決定讓它更像Java,並將構造函數的概念添加到語言中。因此僞類出生了。 您可以檢查此鏈接瞭解如何OOP在原型JS使用: http://howtonode.org/prototypical-inheritance