2016-01-02 89 views
0

我目前正在阅读关于模块的节点文档并且遇到了这段代码。节点 - 工厂还是构造函数,还是两者都不?

该文档说,以下是导出构造函数 - 但没有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

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

如果你写像这样调用代码可能是清晰的:

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

比较这对当模块不返回顶级功能的情况。区域功能需要通过宽度参数:

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

该示例有点麻烦。模块中的每个函数都可以访问width变量。大不了。但想象一下,像数据库连接一样传递。您可以看到该模式在面向对象的语言中完成了与构造函数大致相同的事情,或者实际上您使用new关键字构造javascript对象的方式。

+0

谢谢。现在对我更有意义。 –

相关问题