Javascript TypeError:不是构造函数

Javascript TypeError:不是构造函数,javascript,node.js,electron,Javascript,Node.js,Electron,我只是将代码用作有关JavaScript类的学习练习 代码生成“TypeError:SimpleLogger不是构造函数”。该类似乎可以导出,但我无法在main.js文件中实例化它 我减少了代码以显示问题。我想知道是否有人能发现这个问题。谢谢 // In simplelogger.js "use strict"; class SimpleLogger { constructor(level) { this.level = level || DEFAULT_LEVEL;

我只是将代码用作有关JavaScript类的学习练习

代码生成“TypeError:SimpleLogger不是构造函数”。该类似乎可以导出,但我无法在main.js文件中实例化它

我减少了代码以显示问题。我想知道是否有人能发现这个问题。谢谢

// In simplelogger.js
"use strict";
class SimpleLogger {
    constructor(level) {
        this.level = level || DEFAULT_LEVEL;
    }

    // .... other methods
}

const DEFAULT_LEVEL = 'info';

module.exports = {
    SimpleLogger,
    DEFAULT_LEVEL
}

// In main.js
"use strict";
const SimpleLogger = require('./simplelogger.js');

let log = new SimpleLogger('info');

错误出现在最后一行。

您导出的对象同时包含
SimpleLogger
DEFAULT\u LEVEL
,因此要在main.js中使用它,您需要像这样正确地引用它

const SimpleLogger = require('./simplelogger.js').SimpleLogger;
let log = new SimpleLogger('info');
如果您只想导出
SimpleLogger
,可以这样更改导出

module.exports = SimpleLogger

然后,您可以像在代码中一样要求
SimpleLogger

您不需要
使用strict
。您导出的对象有两个键(SimpleLogger和默认\u级别);日志级别的常量可能属于SimpleLogger,并以默认值导出该类。@Geuis使用
“use strict”
有什么问题?通常,在代码中包含这一点是一种很好的做法,只要它不是在顶级运行的。@kevinji实际上,您可能是对的。在过去的几年里,我一直在专门使用es6+,在模块级启用了严格模式,并且是规范的一部分。因此,这里不需要严格模式。我在类定义之后看到了“use strict”,而不是在模块的顶部。在位置上是否有偏好,或者我是否应该完全不使用它?这是固定的。非常感谢。