Module.exports:不是构造函数错误

Kur*_*den 2 node.js ecmascript-6

有人可以解释为什么第一次导出会引发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();
Run Code Online (Sandbox Code Playgroud)

Jon*_*lms 5

因为您是第一次实际导出包含属性的对象,所以:

  module.exports = { /*...*/ };
Run Code Online (Sandbox Code Playgroud)

而且您无法构造该对象。但是,您可以获取Person属性并构造该属性:

 const Person = require("person").Person;
 new Person();
Run Code Online (Sandbox Code Playgroud)

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

 const { Person } = require("person");
 new Person();
Run Code Online (Sandbox Code Playgroud)

...但这只有在导出了其他内容的情况下才有意义,否则我将使用v2。