假设我有一个正常的模块
module.exports = class MyClass{ }
字符串使用它的标准方法是这样的:
const MyClass = require('myclass.js');
型但是如果我不知道类名,而文件名是一个变量,怎么办?我怎么从它得到类?
const ???? = require(file + '.js');
型
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助手获取导出对象键的名称,如下所示
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"]
ia2d9nvy2#
变量可以任意命名,类名并不重要,因为它是整个模块被导入,而模块导出本身就是一个类。如果它被命名为exports.MyClass = class MyClass {...},那就有关系了。.js扩展名也是可选的,而相对路径很重要。它是:
exports.MyClass = class MyClass {...}
.js
const MyClassNameDoesntMatterHere = require('./' + className);
字符串
2条答案
按热度按时间w51jfk4q1#
考虑到类是函数的“底层”,你可以访问一个函数的名字,你可以在运行时访问这个名字。但是为了创建示例,你不需要知道在required文件中的类的名字,因为你在required文件中给它给予一个新的别名。因此,你真正需要知道的唯一一件事是需要的文件的名字。
字符串
如果你想确保保留类的名称并公开它,我建议将对象导出为命名空间。如果你想使其通用,你可以通过
Object
助手获取导出对象键的名称,如下所示型
ia2d9nvy2#
变量可以任意命名,类名并不重要,因为它是整个模块被导入,而模块导出本身就是一个类。如果它被命名为
exports.MyClass = class MyClass {...}
,那就有关系了。.js
扩展名也是可选的,而相对路径很重要。它是:
字符串