首页 > 解决方案 > Module.exports:不是构造函数错误

问题描述

有人可以解释为什么第一次导出会引发is not a constructor错误,而第二次导出有效吗?

// Throws a `is not a constructor` error
module.exports = {
    Person: function () {
        constructor()
        {
            this.firstname;
            this.lastname;
        }
    }
}

// Works
class Person {
    constructor()
    {
       this.firstname = '';
       this.lastname = '';
    }
}
module.exports = Person;

// Usage:
const Person = require("person");
let person = new Person();

标签: node.jsecmascript-6

解决方案


因为第一次实际导出包含属性的对象时:

  module.exports = { /*...*/ };

而且你不能构造那个对象。但是,您可以获得 Person 属性并构造它:

 const Person = require("person").Person;
 new Person();

您还可以解构导入的对象:

 const { Person } = require("person");
 new Person();

...但这只有在那里导出其他东西时才有意义,否则我会选择 v2。


推荐阅读