TypeError:不是构造函数

Posted

技术标签:

【中文标题】TypeError:不是构造函数【英文标题】:TypeError: is not a constructor 【发布时间】:2019-08-14 13:08:10 【问题描述】:

我只是将代码用作有关 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');

最后一行产生了错误。

【问题讨论】:

你不需要use strict 您正在使用两个键(SimpleLogger 和 DEFAULT_LEVEL)导出一个对象;也许日志级别的常量可以属于SimpleLogger,默认导出类。 @Geuis 使用"use strict" 有什么问题?将它包含在您的代码中通常是一种很好的做法,只要它不在顶层运行。 @kevinji 实际上你可能是对的。在过去的几年里,我一直在专门使用 es6+,其中启用了模块级别的严格模式,并且是规范的一部分。所以那里没有必要。 ***.com/questions/18417381/… 我在类定义之后而不是模块顶部看到了“使用严格”。是否有放置偏好或我根本不应该使用它? 【参考方案1】:

您正在导出一个同时包含 SimpleLoggerDEFAULT_LEVEL 的对象,因此要在 main.js 中使用它,您需要像这样正确引用它

const SimpleLogger = require('./simplelogger.js').SimpleLogger;
let log = new SimpleLogger('info');

如果你只想导出SimpleLogger,你可以像这样改变你的导出

module.exports = SimpleLogger

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

【讨论】:

解决了。谢谢。

以上是关于TypeError:不是构造函数的主要内容,如果未能解决你的问题,请参考以下文章

Javascript:TypeError:...不是构造函数

TypeError:BookList 不是构造函数

TypeError:webpack.ProvidePlugin 不是构造函数

TypeError:createjs.Sprite 不是构造函数

TypeError: webpack.optimize.UglifyJsPlugin 不是构造函数

Mongoose TypeError:用户不是构造函数