节点 - 工厂或构造函数,或两者都没有?

时间:2016-01-02 22:23:39

标签: javascript node.js constructor module

我目前正在阅读有关模块的节点文档,并且遇到了这段代码。

文档说明以下是导出构造函数 - 但是没有New关键字来实例化对象。作为一个初学者,这让我有点困惑。它是构造函数吗?

如果是这样,为什么没有New关键字?提前谢谢。

//CODE USING MODULE

var square = require('./square.js');
var mySquare = square(2);
console.log('The area of my square is ' + mySquare.area());

// THE MODULE
// assigning to exports will not modify module, must use        module.exports

module.exports = function(width) {
  return {
    area: function() {
    return width * width;
   }
  };
}

1 个答案:

答案 0 :(得分:1)

我认为在这个例子中,作者只是指的是从模块中导出顶级函数的模式。您需要模块时必须调用此函数。这个顶级函数将闭包中的值传递给它返回的任何函数。

如果你像这样编写调用代码可能会更清楚:

var square = require('./square.js')(2);
square.area();

将此与模块未返回顶级功能的情况进行比较。区域函数需要传递宽度参数:

var square = require('./square.js');
square.area(2);

这个例子有点人为。模块中的每个函数都可以访问width变量。很重要。但想象一下像数据库连接那样传递。您可以看到该模式与面向对象语言中的构造函数完成相同的任务,或者实际上是使用new关键字构造javascript对象的方式。