目前我有:
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对象,如上面的代码片段所述?
答案 0 :(得分:1)
如果您不希望模块的使用者使用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!
但请注意,极大会使您模块的用户感到困惑。您的原始模式被广泛接受,是公开构造函数的首选方式。