CEN*_*EDE 5 javascript node.js ecmascript-6
我有这个示例类sync.js作为我项目中某处的模块。
'use strict';
export default class Sync{
constructor(dbConnection){
this.dbConnection = dbConnection;
}
test(){
return "This is a test " + this.dbConnection;
}
}
Run Code Online (Sandbox Code Playgroud)
然后在我的控制器上的某个地方,我将这个类用作:
'use strict';
import Sync from '../../path/to/module'; // <-- works fine
const sync = new Sync('CONNECTION!'); // <-- meh
console.log(sync.test());
Run Code Online (Sandbox Code Playgroud)
我期待在控制台上记录这样的事情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打印这是什么样的我的预期。但是我的安装有什么问题?
跆拳道?
编辑
伙计们,我想我发现了问题,基于@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
Run Code Online (Sandbox Code Playgroud)
模块树看起来像这样。
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');`
Run Code Online (Sandbox Code Playgroud)
现在。如何在不做的export default new Sync();情况下导出new?
编辑2
如何导出导出默认 new Sync(); 不做新的?
new只需从中删除关键字module/lib/index.js:
import Sync from './sync';
export default Sync;
Run Code Online (Sandbox Code Playgroud)
或者直接从module/lib/sync.js
编辑1
根据您所说的记录,
Sync { dbConnection: undefined }
Run Code Online (Sandbox Code Playgroud)
看起来您的导入正在返回类的实例(它是一个对象),而不是类定义本身。
所以console.log(new Sync())会返回你所说的,
import Sync from './sync';
export default Sync;
Run Code Online (Sandbox Code Playgroud)
不是console.log(Sync)
Sync { dbConnection: undefined }
Run Code Online (Sandbox Code Playgroud)
new Sync您确定在导出之前没有致电任何地方吗?
初步答复
有问题的代码工作正常:
class Sync {
constructor(dbConnection) {
this.dbConnection = dbConnection;
}
test() {
return "This is a test " + this.dbConnection;
}
}
console.log(new Sync());Run Code Online (Sandbox Code Playgroud)
根据您的错误:
TypeError: object is not a constructor
Run Code Online (Sandbox Code Playgroud)
您import没有返回您认为返回的内容,并且您正在尝试new无法实例化的内容。
很可能你的import路径是错误的。