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

Node - factory or constructor, or neither?

本文关键字:或者 两者都 构造函数 工厂 节点      更新时间:2023-09-26

我目前正在阅读关于模块的节点文档,并发现了这段代码。

文档中说,下面是导出一个构造函数,但没有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;
   }
  };
}

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

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

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

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

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

这个例子有点做作。模块中的每个函数都可以访问宽度变量。了不起的事但是想象一下传入数据库连接之类的东西。您可以看到该模式完成了与面向对象语言中的构造函数相同的事情,或者实际上是使用新关键字构建javascript对象的方式。