首页 > 解决方案 > 如何在 JavaScript 中使用反射调用方法

问题描述

当我需要来自服务器的信息时,我通过 Worker 发送一个数据包,在数据包内指定返回时要调用的函数的名称。工作人员通过 websocket 将数据包发送到服务器。我使用 websockets 是因为流量可以随时从连接的任何一侧启动。当工作人员从服务器接收到数据包时,它会调用数据包中指定的函数。例子:

function trial() {
    var p = new Packet();
    var c1 = new Command("getGridColumnOptions");
    p.addCommand(c1);
    p.addreturnRoutine("trial_return");
    sendMessage(p);
}

function trial_return(packet) {
    console.log(JSON.stringify(packet));
}

工作人员使用以下方法调用返回函数:

window[packet.returnRoutine](packet);

到目前为止,这一切都很好,但是我现在需要从一个类中调用服务器并返回到同一个类中的一个方法。

class Tab {
    constructor() {
    }
    trial() {
            var p = new Packet();
            var c1 = new Command("getGridColumnOptions");
            p.addCommand(c1);
            p.addreturnRoutine("trial_return");
            sendMessage(p);
    }

    trial_return(packet) {
            console.log(JSON.stringify(packet));
    }
}

worker 获得了 return 但不能在实例化的类中调用 return 方法。我明白了

TypeError: window[json.returnRoutine] 不是函数

我知道这是因为我没有用父对象引用限定方法名称,但我不知道如何做到这一点,并且它最初不会被实例化为全局变量。

非常感谢您的任何帮助!

标签: javascriptreflectioninstantiation

解决方案


推荐阅读