我将此示例类 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');`
现在。如何在不export default new Sync();
的情况下导出new
?
答案 0 :(得分:4)
编辑2
如何导出导出默认的新Sync();没有新的?
只需从new
中删除module/lib/index.js
关键字:
import Sync from './sync';
export default Sync;
或直接从module/lib/sync.js
编辑1
根据您所说的记录,
Sync { dbConnection: undefined }
似乎你的import返回了一个类的实例(它是一个对象),而不是类定义本身。
所以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
路径很可能是错误的。
答案 1 :(得分:2)
因为这是谷歌的最佳结果:
如果您在Node中使用require()
语句导入类并引入循环依赖项,则会突然看到此错误弹出,因为require()
正在返回{}
而不是类。