2017-04-25 24 views
3

使用Node.js的版本7.7.2,我想确定,并从这样的模块导出ES6类:如何导出ES6类并在另一个模块中构建它的一个实例?

// Foo.js 
class Foo { 
    construct() { 
     this.bar = 'bar'; 
    } 
} 
module.exports = Foo; 

,然后导入类到另一个模块,构建表示类的一个实例像这样:

// Bar.js 
require('./foo'); 
var foo = new Foo(); 
var fooBar = foo.bar; 

但是,这种语法不起作用。我正在尝试做什么,如果是这样,那么实现这个目标的正确语法是什么?

谢谢。

+0

你知道如何使用模块预ES6的NodeJS? – Bergi

+0

这里的一个明显的问题是,你设置属性'foo',但寻找属性'bar' ... – lonesomeday

+0

是的,这是一个错字。只是修复它。接得好。状态报告:目前正在执行此项工作,将很快返回并显示结果。 –

回答

3

你必须使用正规节点模块语法这一点。

您的示例代码中有一些错误。首先,class不应该跟着()。另外,类构造函数应该是constructor而不是construct。请看下面的foo.js以获得正确的语法。

foo.js

class Foo { 
    constructor() { 
    this.foo = 'bar'; 
    } 
} 

module.exports = Foo; 

bar.js

const Foo = require('./foo'); 

const foo = new Foo(); 

console.log(foo.foo); // => bar 
+0

你是对的,parens是一个现在已经修复的错字。你发布的语法不起作用。foo.foo结束('./ Foo'))打印出类的定义,然后在'undefined'和'type of foo'中找到类型'object'而不是type'Foo'。所以它会被导出/导入,问题是'new Foo()'没有调用构造函数。 –

+0

你必须做一些不正确的事情,我实际上是用这两个文件做了一个测试项目。'foo.foo'原因是因为Foo类有一个属性foo,根据该类的实例名(在本例中为'foo'),它会出现在'foo.foo'中,你可以这样做:'const x = new Foo ()',然后调用'x.foo'这将是'bar'。希望有帮助。 –

+0

我收回上述。这是正确的语法。我只是拼写错误的构造函数。我在一个耻辱的海洋中充满了涟漪。 –

0
// Foo.js 
export class Foo() { 
    construct() { 
     this.foo = 'bar'; 
    } 
} 

通知关键字EXPORT

+0

相应的输入将如何显示? – Bergi

+0

我不确定你的意思是“相应的输入” – user5328504

+0

糟糕,我的意思是写入导入。 *导入*,不是输入。 – Bergi

相关问题