我创建的班级未导出对象

时间:2019-06-08 08:55:47

标签: javascript class object

我需要在ShoppingCart.js文件中创建ShoppingCart类,并将其导出到测试文件中,但出现错误,提示我的类不是构造函数

我知道问题不在导入导出中,因为在创建js文件之前,我得到了找不到模块的错误。我还尝试在文件中创建该类的新实例,并且可以正常工作

file ShoppingCart.js
class ShoppingCart{
    constructor(name){
        this.name=name
    }
}

module.exports = { ShoppingCart}

我的测试文件的代码是

 const ShoppingCart = require("./ShoppingCart")
 new ShoppingCart()

我运行测试文件时得到

TypeError: ShoppingCart is not a constructor

2 个答案:

答案 0 :(得分:5)

您当前正在导出属性ShoppingCart的对象:

module.exports = { ShoppingCart }
//               ^^   object   ^^

只需导出ShoppingCart

module.exports = ShoppingCart;

或者,在导入时,引用对象的ShoppingCart属性:

const { ShoppingCart } = require("./ShoppingCart")

答案 1 :(得分:0)

您正在导出具有ShoppingCart属性的对象

要么:

  1. 将导出更改为module.exports = ShoppingCart;

  2. 将您的require更改为const { ShoppingCart } = require("./ShoppingCart");

如果您使用的是现代版本的Node.js,则可以考虑使用ESM( E CMA S 密码 M 个单数)而是(export / import):

export class ShoppingCart{
    constructor(name){
        this.name=name
    }
}

import { ShoppingCart } from "./ShoppingCart.js";
new ShoppingCart();

它使用JavaScript的本机模块,而不是Node.js的CommonJS变体。在新的几年中,这将成为标准的方法。目前,要使用ESM,请使用--experimental-modules标志和包含package.json的{​​{1}}。 (或者,可以使用文件扩展名type: "module"代替package.json type字段。)Details here