很长一段时间以来,我问自己,这三种在Node.js中导出整个类的方法之间是否存在真正的区别。在不同类型的方法中是否存在“正确”的方法或任何区别?
假设我们有这个示例类:
class Foo {
constructor() {
this.name = 'foobar';
}
bar() {
console.log(this.name);
}
}
在Node.js环境中导出此类的正确方法是什么?
module.exports = new Foo();
或
module.exports = new Foo;
或
module.exports = Foo;
非常感谢您提前提出任何答案!
答案 0 :(得分:1)
module.exports = new Foo();
这意味着您要导出类的实例,而不是类本身。
就像在require('./Foo')
中一样,您获得的是对象而不是类。
与
类似的情况module.exports = new Foo;
如果省略括号,则为JSLint would complain。
但是
module.exports = Foo;
表示您正在导出该类,则可以按如下方式使用它:
const Foo = require('./Foo');
const foo = new Foo();
答案 1 :(得分:1)
除了@Faizuddin Mohammed的答案,您还可以通过这种方式(我一直这样做)来进行es6导出:
export class MyClass { ....
可以这样导入:
import { MyClass } from "...."
或使用默认导出:
class MyClass {}
export default MyClass
将以这种方式导入:
import MyClass from "..."
问候和新年快乐!
答案 2 :(得分:0)
module.exports = Foo
是正确的选择,请参见参考文献here
答案 3 :(得分:0)
没有正确的方法来导出类,该方法取决于您的需要(是否需要导出类本身或类的实例)。
最常见的方法是使用(这将导出类本身)
module.exports = Foo;
或在ES6
中export default Foo
导入就像
const Foo = require('./Foo');
const foo = new Foo();
或在ES6
中import Foo from './Foo'
const foo = new Foo()
答案 4 :(得分:0)
没有导出类的“正确”方法,因为不同的导出适合不同的目的。
是否需要导出对象的实例,请使用其中一个
module.exports = new Foo();
或
module.exports = new Foo;
这两个选项是等效的。
如果需要导出类本身,以便模块使用者可以自己创建实例,则可以导出类
module.exports = Foo;
是必经之路。