我将这个示例类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
js文件并导出为export default new Sync();
的'./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
发布于 2016-07-27 10:28:10
编辑2
如何导出默认的新同步();而不执行新的?
只需从new
中删除module/lib/index.js
关键字
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
路径是错误的。
发布于 2016-12-15 16:49:43
因为这是google的最高结果:
如果在Node中使用require()
语句导入类并引入循环依赖项,则会突然出现此错误,因为require()
返回的是{}
而不是类。
https://stackoverflow.com/questions/38620462
复制相似问题