节点模块和原型inheritance

目前我有:

index.js(在模块foo中)

function Foo(options) { this.memberVar = options.memberVar; } Foo.prototype.bar = function(word) { console.log('word: ', word); } module.exports = Foo; 

server.js(在单独的模块栏中)

 var Foo = require('foo'), foo = new Foo(options), greeting = 'Hello World!'; foo.bar(greeting); // prints Hello World! 

这很好,除了我觉得如果我不需要使用new关键字来实例化一个新的foo对象来暴露它的成员函数,它可能会更漂亮,更容易理解。

所以这是我想要做的:

 var greeting = 'Hello World!', foo = require('foo')(options); foo.bar(greeting); // prints Hello World! 

如何修改我当前的foo – index.js以便能够访问Foo对象,如上面的代码片段所述?

如果您不希望模块的使用者使用new ,则可以公开工厂方法:

 // index.js (in module foo) function Foo(options) { this.memberVar = options.memberVar; } Foo.prototype.bar = function(word) { console.log('word: ', word); } module.exports = function(options) { return new Foo(options); } // server.js (in separate module bar) var greeting = 'Hello World!', foo = require('foo')(options); foo.bar(greeting); // prints Hello World! 

但是,请注意,它可能会大大混淆模块的用户。 您的原始模式已被广泛接受,并且是公开构造函数的首选方式。