我想仅使用类名和方法名来调用 NodeJS 类。如果我只有类和方法的字符串值,我该怎么做?假设我有这个 Controller
export default class PageController extends BaseController {
async mainMethod(request, response) {
const mapClass = {
class: "MyClass",
method: "testMethod",
};
global.${mapClass.class}.${mapClass.method}(); <-- How do I call the class MyClass.testMethod();
}
}
现在在我的 MyClass.js 中我有这个函数
// Inside MyClass.js
export default class MyClass {
testMethod(params) {
return "My response here";
}
}
更新:
import resolver from '../services/Resolver';
export default class PageController extends BaseController {
async mainMethod(request, response) {
const mapClass = {
class: "MyClass",
method: "testMethod",
};
let classInstance = new resolver[mapClass.class];
classInstance[mapClass.method]();
}
}
// Inside ../services/Resolver.js
import MyClass from './MyClass';
export {
MyClass,
}
// Content of MyClass.js
// Inside MyClass.js
export default class MyClass {
testMethod(params) {
return "My response here";
}
}
当我到达 let classInstance = new resolver[mapClass.class];
时,调用只是挂起,并且只是给了我一个请求超时
最佳答案
实现此目的的一种方法是创建一个查找对象,以便您可以控制哪些字符串指向哪些类,而不是在某些全局空间中查找内容。然后你可以用字符串键获取类对象:
class MyClass {
testMethod() {
console.log("My response here");
}
}
// create dispatch object mapping strings to classes
const classes = {MyClass}
class PageController {
mainMethod() {
const mapClass = {
class: "MyClass",
method: "testMethod",
};
let instance = new classes[mapClass.class] // lookup class with string key
instance[mapClass.method]() // you can then lookup the method directly on the intance
}
}
let p = new PageController()
p.mainMethod()
关于node.js - 使用字符串调用类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56053991/