节点模块和原型继承
Node Modules and Prototype 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!
但是,请注意,这可能会大大混淆模块的用户。您的原始模式是被广泛接受的,并且是公开构造函数的首选方式。
相关文章:
- JavaScript对象不是从原型链继承的
- 如何使用原型继承编写一个整洁灵活的复杂javascript应用程序
- $emit,$broadcast,原型继承
- Javascript:继承原型而不重新定义构造函数
- 原型继承未按预期工作
- JavaScript中的原型继承.我可以称之为“超级”等价物吗?
- 为什么函数对象的实例没有继承函数原型属性
- 不创建父对象的原型继承
- Javascript基本继承与Crockford原型继承
- JavaScript-构造函数参数和原型继承
- 使用Object.create作为原型的原型继承将[Object]作为实例的原型
- javascript继承中正确的原型做作是什么
- 如何进行JavaScript原型继承(原型链)
- Javascript原型继承原型函数调用
- 对象不继承原型函数
- 从其他类继承原型方法,而不重写自己的原型方法
- JavaScript继承原型
- 继承原型
- Javascript继承/原型混淆
- 使用.call(this)继承原型