NodeJS 从require()获取类示例

lf3rwulv  于 11个月前  发布在  Node.js
关注(0)|答案(2)|浏览(108)

假设我有一个正常的模块

module.exports = class MyClass{ }

字符串
使用它的标准方法是这样的:

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


但是如果我不知道类名,而文件名是一个变量,怎么办?我怎么从它得到类?

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

w51jfk4q

w51jfk4q1#

考虑到类是函数的“底层”,你可以访问一个函数的名字,你可以在运行时访问这个名字。但是为了创建示例,你不需要知道在required文件中的类的名字,因为你在required文件中给它给予一个新的别名。因此,你真正需要知道的唯一一件事是需要的文件的名字。

// 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"]

ia2d9nvy

ia2d9nvy2#

变量可以任意命名,类名并不重要,因为它是整个模块被导入,而模块导出本身就是一个类。如果它被命名为exports.MyClass = class MyClass {...},那就有关系了。
.js扩展名也是可选的,而相对路径很重要。
它是:

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

字符串

相关问题