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】:
您正在导出一个同时包含 SimpleLogger
和 DEFAULT_LEVEL
的对象,因此要在 main.js 中使用它,您需要像这样正确引用它
const SimpleLogger = require('./simplelogger.js').SimpleLogger;
let log = new SimpleLogger('info');
如果你只想导出SimpleLogger
,你可以像这样改变你的导出
module.exports = SimpleLogger
然后您可以像在代码中那样要求SimpleLogger
。
【讨论】:
解决了。谢谢。以上是关于TypeError:不是构造函数的主要内容,如果未能解决你的问题,请参考以下文章
Javascript:TypeError:...不是构造函数
TypeError:webpack.ProvidePlugin 不是构造函数
TypeError:createjs.Sprite 不是构造函数