从require()获取类实例

时间:2019-01-13 19:27:30

标签: javascript node.js module

说我有一个普通的模块

  module.exports = class MyClass{ }

使用它的标准方法如下:

const MyClass = require('myclass.js');

但是,如果我不知道类名并且文件名是变量,该怎么办?如何从中获得课程?

const ???? = require(file + '.js');

2 个答案:

答案 0 :(得分:1)

该变量可以任意命名,类名称无关紧要,因为导入的是整个模块,而模块导出本身就是一个类。是否将其命名为exports.MyClass = class MyClass {...}之类的导出文件就很重要。

.js扩展名也是可选的,而相对路径很重要。

是:

const MyClassNameDoesntMatterHere = require('./' + className);

答案 1 :(得分:1)

Considerung类是“幕后”函数,您可以访问函数的名称,可以在运行时访问该名称。但是,为了创建实例,您不需要知道所需文件中类的命名,因为您可以通过两种方式在所需文件中为其提供新的别名。因此,您真正需要知道的唯一一件事就是所需文件的名称。

// my-class.js
module.exports = class MyClass { }

// require-class.js
const MyNewClassName = require("./my-class");
console.log(MyNewClassName.name); // => "MyClass"
const classInstance = new MyNewClassName();
console.log(classInstance); // => MyClass { }

如果要确保保留类的名称并公开它,建议将对象导出为名称空间。如果要使其通用,则可以通过Object这样的辅助程序来获取导出的对象键的名称。

// my-class.js
class MyClass {}
module.exports = {MyClass: MyClass};
// or module.exports = {MyClass};

// requiring file ...
const importedObject = require("./my-class");
const myInstance = new importedObject.MyClass();
const objectsInRequire = Object.keys(importedObject); // => ["MyClass"]
相关问题