【问题标题】:NodeJS modules vs classesNodeJS 模块与类
【发布时间】:2011-10-18 09:15:27
【问题描述】:

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

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

【问题讨论】:

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

标签: class node.js module commonjs


【解决方案1】:

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2012-07-29
        • 2014-06-06
        • 1970-01-01
        • 1970-01-01
        • 2017-06-26
        • 2021-11-28
        • 2013-06-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多