我有不同类型的 Action 检查,它们执行不同的功能,只是我做了if和else条件来检查 Action 类型并执行相关功能,如下面的代码片段

public onMessage = (messageEvent) => {
    if (messageEvent.data.action === 'subscribeTriggers') {
        this.subscribeTriggers(messageEvent);
    } else if (messageEvent.data.action === 'setGlobalFilters') {
        this.setGlobalFilters(messageEvent);
    } else if (messageEvent.data.action === 'getGlobalFilters') {
        this.receiveGlobalFilters(messageEvent);
    } else if (messageEvent.data.action === 'initFromGlobalFilters') {
        this.initFromGlobalFilters(messageEvent);
    }

有没有更好的解决方案来处理这种情况,因为我有可能在将来不得不采取进一步行动并一次又一次地更改代码的情况下采取更多措施,这我觉得效率很低。

onMessage函数之间用作porthole库的事件侦听器(Porthole是用于安全跨域iFrame通信的小库。)我曾在我的react app的iframe中进行通信

提前致谢

最佳答案

javascript中的对象可以看作是关联数组,其中键是属性或函数的名称。

因此,您可以像这样拨打电话:

this[messageEvent.data.action](messageEvent);

警告(如Joe Clay所述):使用这种语法,对象this的每个函数都是可调用的,因此,如果this包含不想“公开”的函数,则可能导致“安全漏洞”。

09-29 23:21