我有这个Node.js模块结构:
class Foo {
log() {
console.log(this.bar); // should log 'hello'
}
}
module.exports = new Foo;
我如何“要求”上述内容并传递'bar'作为参数?
以下是这些内容:
var Foo = require("./foo.js")("hello");
我对如何使用基于类的模块特别感兴趣。
更新:基于类的单身人士是 Bad Idea™ 。我转而使用了object-literal模块结构。
答案 0 :(得分:2)
您正在混合类和模块定义。您不导出实例。导出导入后实例化的定义。然后你必须调用一个函数
如果您正在使用ECMA2015课程,那么您可以写下:
export default class Foo {
constructor(bar) {
this._bar = bar;
}
log() {
console.log(this._bar);
}
}
然后你的调用代码应如下所示:
import Foo from './foo.js';
let foo = new Foo('Boom!');
foo.log();
导入关键字与ES5中的require一样使用。
答案 1 :(得分:1)
您可以更改foo.js
以导出类,而不是其实例,并添加一个构造函数,将第一个参数分配给this.bar
:
class Foo {
constructor(bar) {
this.bar = bar;
}
log() {
console.log(this.bar); // should log 'hello'
}
}
module.exports = Foo;
然后你可以这样使用它:
var foo = new (require("./foo.js"))("hello");
foo.log();