节点模块和原型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!
但是,请注意,它可能会大大混淆模块的用户。 您的原始模式已被广泛接受,并且是公开构造函数的首选方式。