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

时间:2016-07-27 18:20:25

标签: 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;
    }
}

然后在我的控制器的某个地方,我正在使用这个类:

'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吗

修改

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

2 个答案:

答案 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()正在返回{}而不是类。