22

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

是什么让模块与类如此不同?你使用它们的方式不同,命名空间的区别是显而易见的。除此之外,它们对我来说似乎非常相似,或者我只是在这里没有看到明显的好处。

4

3 回答 3

25

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

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

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

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

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

于 2011-08-02T15:45:50.407 回答
3

JS 最初是一个原型继承系统。它和其他语言一样超级简单。但后来 Netscape 决定让它更像 Java,并在语言中添加了构造函数的想法。因此,伪类诞生了。您可以查看此链接以了解 JS 中如何使用原型 OOP:http: //howtonode.org/prototypical-inheritance

于 2013-08-09T09:24:07.357 回答
0

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

于 2011-08-02T16:48:13.397 回答