Class NodeJS模块与类

Class NodeJS模块与类,class,node.js,module,commonjs,Class,Node.js,Module,Commonjs,对我来说,类与NodeJS(CommonJS)模块非常相似。您可以有很多,它们可以重用,它们可以相互使用,通常每个文件一个 是什么使模块与类如此不同?使用它们的方式不同,名称空间的差异也很明显。除此之外,它们对我来说似乎非常相似,或者我只是没有看到明显的好处。模块更像是包(使用Java术语)而不是类。你没有实例化一个模块;只有一份。它是一种组织相关功能的工具,但通常不会封装对象特定实例的数据 最接近类的类似物(撇开那些在JavaScript中实际构造基于类的继承的库不谈)可能只是一个构造函数。当

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


是什么使模块与类如此不同?使用它们的方式不同,名称空间的差异也很明显。除此之外,它们对我来说似乎非常相似,或者我只是没有看到明显的好处。

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

最接近类的类似物(撇开那些在JavaScript中实际构造基于类的继承的库不谈)可能只是一个构造函数。当然,您可以将这些函数放在模块中

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

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

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

一个关键问题;“通常每个文件一个”的说法是不正确的;模块绝对是每个文件一个。将模块的
导出
带入命名空间的
require()
无法区分该模块的导出内容;模块(文件)导出的所有内容都使用
require()
语句导入。尝试将多个模块放入一个文件只意味着当您尝试加载“任一”模块时,您将获得该文件中的所有内容。

JS最初是一个原型继承系统。它和语言的其他部分一样非常简单。但后来Netscape决定让它更像Java,并在语言中加入了构造函数的概念。于是,伪类诞生了。 您可以查看此链接,了解如何在JS中使用原型OOP:

让我感兴趣的是node.js服务器上的基准测试-commonjs模块与ECMAScript 6类