node.js - 使用字符串调用类函数

标签 node.js

我想仅使用类名和方法名来调用 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/

相关文章:

javascript - NPM 每周下载量为零

使用typeof后node.js变量未定义错误

javascript - 如何使用express js路由器解决CORS重定向?

javascript - 如何动态渲染ejs中输入的选定选项

node.js - 如何获取目录中文件的总大小?

node.js - 如何为 80 端口上的网站制作 Node.js Multi-Tenancy ?

javascript - Nodejs telnet登录无法输入密码

node.js - 类型错误 : server render is no a function

node.js - 特定帖子上收集的所有字段的总和

c++ - 如何将带有缓冲区的对象从插件发送到 Node 线程安全?