Nodejs:TypeError:对象不是构造函数上的Javascript ES6
Javascript ES6 on Nodejs : TypeError: object is not a constructor
我在项目的某个地方有一个样本类sync.js作为模块。
'use strict';
export default class Sync{
constructor(dbConnection){
this.dbConnection = dbConnection;
}
test(){
return "This is a test " + this.dbConnection;
}
}
然后在我的控制器上的某个地方,我使用这个类作为:
'use strict';
import Sync from '../../path/to/module'; // <-- works fine
const sync = new Sync('CONNECTION!'); // <-- meh
console.log(sync.test());
我本来希望在控制台This is a test CONNECTION!
上记录这样的内容。但我却犯了这个错误。TypeError: object is not a constructor
我做错了什么?
顺便说一句,如果我去掉行const sync = new Sync('CONNECTION!');
并将console.log()
更改为console.log(Sync.test());
,则打印输出This is a test undefined
,这是我所期望的。但是我的讨好怎么了?
WTF
编辑
伙计们,我认为我发现了问题,基于@JLRishe和rem035指出的,它返回了类的实例,而不是类本身。事实上,有一个index.js
导入'./sync'
js文件,导出为export default new Sync();
。这是整个index.js
。
'use strict';
import Sync from './sync';
export default new Sync(); // <-- potential prodigal code
模块树如下所示。
module
|
|_ lib
| |_ index.js // this is the index.js I am talking about
| |_ sync.js
|
|_ index.js // the entry point, contains just `module.exports = require('./lib');`
现在。如何在不执行new
的情况下导出export default new Sync();
?
编辑2
如何导出导出默认的new Sync();不做新的?
只需从module/lib/index.js
:中删除new
关键字
import Sync from './sync';
export default Sync;
或直接从module/lib/sync.js
导入
编辑1
根据你所说的记录,
Sync { dbConnection: undefined }
看起来您的导入返回的是类的一个实例(它是一个对象),而不是类定义本身。
所以console.log(new Sync())
会返回您所说的内容,
class Sync {
constructor(dbConnection) {
this.dbConnection = dbConnection;
}
test() {
return "This is a test " + this.dbConnection;
}
}
console.log(new Sync());
不是console.log(Sync)
class Sync {
constructor(dbConnection) {
this.dbConnection = dbConnection;
}
test() {
return "This is a test " + this.dbConnection;
}
}
console.log(Sync);
您确定在导出之前没有在任何地方致电new Sync
吗?
初始答案
有问题的代码运行良好:
'use strict';
class Sync {
constructor(dbConnection) {
this.dbConnection = dbConnection;
}
test() {
return "This is a test " + this.dbConnection;
}
}
const sync = new Sync('CONNECTION!');
console.log(sync.test());
基于您的错误:
TypeError: object is not a constructor
您的import
并没有返回您认为它正在返回的内容,您正在尝试new
无法实例化的内容。
很可能您的import
路径是错误的。
因为这是谷歌上的最高结果:
如果您在Node中使用require()
语句导入类并引入循环依赖项,您会突然看到此错误弹出,因为require()
返回的是{}
而不是类。
- ES6构造函数返回基类的实例
- ES6类是否与构造函数相同
- 使构造函数参数具有ES6类方法的特权
- ES6 - 构造函数中的超级必需
- ES6类构造函数参数
- 从构造函数es6调用静态方法
- 具有默认参数值的 ES6 类构造函数上的 NodeJS 错误
- 当函数绑定在构造函数中时,如何在 ES6 React 中向事件处理程序添加参数
- Jasmine:如何在ES6上监视导入的函数/构造函数
- 使用 ES5 和 ES6 将输入注入组件构造函数
- 在类构造函数 (ES6) 中定义常量
- Javascript ES6 中的静态构造函数
- 检测构造函数(符号) - ES6
- 如何在es6类构造函数中访问click事件的方法
- 模拟除了Jest中的构造函数之外的整个es6类
- ES6构造对象,在赋值时不用作函数参数时的默认值
- 来自构造函数的 ES6 调用值
- 使用Jasmine测试该函数是否在ES6构造函数中执行
- 使用ES6构造函数渲染React组件的刷新页面会破坏应用程序
- 更改ES6构造函数中键的值