NodeJS模块vs类

对我来说,类与NodeJS(CommonJS)模块非常相似。 你可以有很多,他们可以重复使用,他们可以使用对方,他们通常是一个每个文件。

是什么使得模块与类不同? 你使用它们的方式不同,命名空间的差异是显而易见的。 除此之外,他们对我来说看起来也是非常相似的,或者我可能在这里看不到明显的好处。

模块更像是包(使用Java术语)而不是类。 你不要实例化一个模块。 它只有一个副本。 它是组织相关function的工具,但通常不会封装对象特定实例的数据。

也许是类最接近的类(在JavaScript中设置实际构造基于类的inheritance的库)只是一个构造函数。 你当然可以把这些function放在一个模块里面。

function Car() { this.colour = 'red'; } Car.prototype.getColour = function() { return this.colour; }; var myCar = new Car(); myCar.getColour(); // returns 'red' 

你使用模块和类进行封装,但封装的性质是不同的。

JS最初是一个原型inheritance系统。 这是非常简单的,像其他的语言。 但是后来Netscape决定使它更像Java,并且把构造函数的概念join了语言。 因此伪类出生了。 你可以检查这个链接来知道在JS中如何使用原型OOP: http : //howtonode.org/prototypical-inheritance

一件重要的事情; “一般一个文件”的事情是不正确的; 模块绝对是一个文件。 将模块的exports带入命名空间的require()无法区分该模块的导出内容; 使用require()语句导入模块(文件)导出的所有内容。 尝试将多个模块放入文件只意味着当您尝试加载“其中一个”模块时,您将获得该文件中的所有内容。