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

时间:2018-11-01 16:48:31

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

1 个答案:

答案 0 :(得分:3)

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

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

您不能构造该对象。但是,您可以获取Person属性并构造该属性:

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

您还可以破坏导入的对象:

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

...但是这仅在导出了其他内容的情况下才有意义,否则我会选择v2。