NodeJS模块与类

22
对我来说,类很像NodeJS(CommonJS)模块。你可以拥有很多个,它们可以被重复使用,它们可以相互使用,并且通常一个文件只有一个类。
那么,模块与类之间的区别在哪里?它们的使用方式不同,命名空间上的差异也是显而易见的。除此之外,在我看来它们非常相似,或许是因为我没有看到明显的好处吧。

让我感兴趣的是在Node.js服务器上的基准测试 - CommonJS模块与ECMAScript 6类。 - Gal Margalit
3个回答

26

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

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

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

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

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


3

JS最初是一种原型继承系统。它像语言的其余部分一样非常简单。但是后来Netscape决定让它更像Java,并将构造函数的概念添加到了语言中。因此,伪类诞生了。

您可以查看此链接以了解如何在JS中使用原型OOP:http://howtonode.org/prototypical-inheritance


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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接