2011-08-02 190 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