Nodejs上的Javascript ES6:TypeError:对象不是构造函数

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打印这是什么样的我的预期。但是我的安装有什么问题?

跆拳道?

编辑

伙计们,我想我发现了问题,基于@JLRisherem035指出,它返回的是类的实例而不是类本身。事实上,有一个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

nem*_*035 4

编辑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路径是错误的。