说我有一个普通的模块
module.exports = class MyClass{ }
使用它的标准方法如下:
const MyClass = require('myclass.js');
但是,如果我不知道类名并且文件名是变量,该怎么办?如何从中获得课程?
const ???? = require(file + '.js');
答案 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"]