我目前正在阅读有关模块的节点文档,并且遇到了这段代码。
文档说明以下是导出构造函数 - 但是没有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;
}
};
}
答案 0 :(得分:1)
我认为在这个例子中,作者只是指的是从模块中导出顶级函数的模式。您需要模块时必须调用此函数。这个顶级函数将闭包中的值传递给它返回的任何函数。
如果你像这样编写调用代码可能会更清楚:
var square = require('./square.js')(2);
square.area();
将此与模块未返回顶级功能的情况进行比较。区域函数需要传递宽度参数:
var square = require('./square.js');
square.area(2);
这个例子有点人为。模块中的每个函数都可以访问width变量。很重要。但想象一下像数据库连接那样传递。您可以看到该模式与面向对象语言中的构造函数完成相同的任务,或者实际上是使用new关键字构造javascript对象的方式。