直接调用类,而不通过实例变量

时间:2019-04-15 09:27:42

标签: javascript node.js

我在classes.js中创建了以下两个类:

class Person {
    constructor(firstName, lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    display() {
        console.log(this.firstName + " " + this.lastName);
    }
}

module.exports = {
    Person
};

如您所见,我正在通过module.exports导出两个类。

Person = require('./classes.js');

const someone1 = new Person("First name", "Last name"); // <-- does NOT work

const someone = new Person.Person("First name", "Last name"); // does work
someone.display();

但是,调用类时,直接调用类时出现错误。

有人建议如何直接调用该类吗?

感谢您的答复!

4 个答案:

答案 0 :(得分:3)

如果您希望将所有类都放在一个名为classes.js的文件中,那么这应该可行;

// classes.js

class Person {
  // ...
}

class Vehicle {
  // ...
}

module.exports = {
  Person,
  Vehicle
}
// some-other-file.js

const { Person } = require('../classes')

const person = new Person('First', 'Last')

尽管为了使事情易于理解,我的建议是将您的班级拆分为多个文件,然后直接从其文件中导出每个班级;

class Person {
  // ...
}

module.exports = Person
const Person = require('../classes/person')

// do something

答案 1 :(得分:1)

如果

module.exports = {
    Person
};

因此

Person = require('./classes.js').Person;

或者,您可以

module.exports = Person;

Person = require('./classes.js');

答案 2 :(得分:1)

classes.js中,您将Person导出为对象属性。因此,要使其按预期工作,您可以执行Destructuring Assignment

const { Person } = require('./classes')

或者直接从classes.js文件中要求类。

const Person = require('./classes').Person

或者,这是一个更好的选择,我认为您可以将Person分离到其自己的文件并默认导出。

  

文件./Person.js

class Person {
    constructor(firstName, lastName) {
        this.firstName = firstName;
        this.lastName = lastName;
    }

    display() {
        console.log(this.firstName + " " + this.lastName);
    }
}

module.exports = Person

然后在您的主文件中执行:

const Person = require('./Person');

答案 3 :(得分:1)

在这种情况下,您要导出包含object类的Person

module.exports = {
    Person
};

因此,当您像Person = require('./classes.js')

那样导入时

您实际上是在导入导出的对象。因此,Person在导入后类似于

Person = {
  Person
};

您可以通过将所需的导出对象分配给module.exports来更改导出,例如:

module.exports = Person

或将导入更改为使用destructuring assignment进行导入(注意花括号):

const { Person } = require('./classes.js');