对我来说,类很像NodeJS(CommonJS)模块。你可以拥有很多个,它们可以被重复使用,它们可以相互使用,并且通常一个文件只有一个类。
那么,模块与类之间的区别在哪里?它们的使用方式不同,命名空间上的差异也是显而易见的。除此之外,在我看来它们非常相似,或许是因为我没有看到明显的好处吧。
那么,模块与类之间的区别在哪里?它们的使用方式不同,命名空间上的差异也是显而易见的。除此之外,在我看来它们非常相似,或许是因为我没有看到明显的好处吧。
模块更像是包(使用Java术语)而不是类。您不会实例化一个模块;它只有一个副本。它是一种组织相关功能的工具,但通常不会封装特定对象实例的数据。
可能最接近类(撇开那些实际上在JavaScript中构建基于类的继承的库)的类比只是一个构造函数。当然,您可以将这些函数放入模块中。
function Car() {
this.colour = 'red';
}
Car.prototype.getColour = function() { return this.colour; };
var myCar = new Car();
myCar.getColour(); // returns 'red'
你同时使用模块和类来进行封装,但封装的本质是不同的。
JS最初是一种原型继承系统。它像语言的其余部分一样非常简单。但是后来Netscape决定让它更像Java,并将构造函数的概念添加到了语言中。因此,伪类诞生了。
您可以查看此链接以了解如何在JS中使用原型OOP:http://howtonode.org/prototypical-inheritance
require()
将模块的exports
带入命名空间时,没有办法区分该模块(文件)的导出内容;在require()
语句中导入该模块(文件)导出的所有内容。试图将多个模块放入一个文件中只意味着当您尝试加载“任一”模块时,您将获得该文件中的所有内容。