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

Javascript ES6 on Nodejs : TypeError: object is not a constructor

本文关键字:ES6 构造函数 Javascript TypeError 对象 Nodejs      更新时间:2023-09-26

我在项目的某个地方有一个样本类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');`

现在。如何在不执行new的情况下导出export default new Sync();

编辑2

如何导出导出默认的new Sync();不做新的?

只需从module/lib/index.js:中删除new关键字

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

因为这是谷歌上的最高结果:

如果您在Node中使用require()语句导入类并引入循环依赖项,您会突然看到此错误弹出,因为require()返回的是{}而不是类。