Javascript 节点模块与原型继承
目前我有: index.js(在模块foo中) server.js(在单独的模块栏中) 这很好,但我觉得如果我不必使用new关键字来实例化一个新的foo对象来公开其成员函数,那么它会更漂亮,也更容易让其他人理解 下面是我希望能够做到的:Javascript 节点模块与原型继承,javascript,node.js,inheritance,prototype,Javascript,Node.js,Inheritance,Prototype,目前我有: index.js(在模块foo中) server.js(在单独的模块栏中) 这很好,但我觉得如果我不必使用new关键字来实例化一个新的foo对象来公开其成员函数,那么它会更漂亮,也更容易让其他人理解 下面是我希望能够做到的: var greeting = 'Hello World!', foo = require('foo')(options); foo.bar(greeting); // prints Hello World! 如何修改当前的foo-index.js,以便
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!
但是,请注意,它可能会极大地迷惑您模块的用户。您的原始模式被广泛接受,是公开构造函数的首选方式 您的示例可能歪曲了您的意图,因为它没有使用OOP提供的上下文。如果您的模块提供的所有函数都不需要(每个实例可变)上下文,那么就没有必要追求OOP。是的,我同意在这个示例中我不需要OOP,但这不是我的实际用例,只是一些快速垃圾。
var greeting = 'Hello World!',
foo = require('foo')(options);
foo.bar(greeting); // prints Hello World!
// 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!