Javascript Web工作者中的函数调用

Javascript Web工作者中的函数调用,javascript,web-worker,Javascript,Web Worker,好的,这有点难以解释,但我使用的是web workers,我的web workers脚本中定义了一些函数,我想调用一个特定的函数作为参数传入另一个函数,问题是我正试图使用worker.postMessage从主脚本执行此操作。如果我发布一些代码可能会更清楚 这是我的主要剧本: worker.postMessage({'cmd': 'register', 'funcName': 'someFunction'}); 这来自工作脚本: self.addEventListener('message',

好的,这有点难以解释,但我使用的是web workers,我的web workers脚本中定义了一些函数,我想调用一个特定的函数作为参数传入另一个函数,问题是我正试图使用worker.postMessage从主脚本执行此操作。如果我发布一些代码可能会更清楚

这是我的主要剧本:

worker.postMessage({'cmd': 'register', 'funcName': 'someFunction'});
这来自工作脚本:

self.addEventListener('message', function(e) {
    var data = e.data;

switch (data.cmd) {
    case 'register':
        registerEvent(data.funcName);
        break;
    case 'unregister':
        break;
    default:
        self.postMessage('Unknown command: ' + data.msg);
    };
}, false);

function someFunction() {

}

function registerEvent(someFunction) {

}

因此,我知道这段代码是错误的,不起作用,但我想你知道我要实现什么。

我会这样做:

self.addEventListener('message', function(e) {
    var data = e.data;

    switch (data.cmd) {
        case 'register':
            registerEvent(data.funcName);
            break;
        case 'unregister':
            break;
        default:
            self.postMessage('Unknown command: ' + data.msg);
    };
}, false);

self.someFunction = function() {}

function registerEvent(someFunctionName) {
    self[someFunctionName]();
}

或者使用该函数创建一个单独的对象,但要确保它是对象的方法,这样调用就很容易了。

我建议您查看插件。该插件允许您在线程中执行代码的任何功能

致以最良好的祝愿


--Vadim

非常感谢,如果我有20多个函数,那么使用一个对象和20个方法它会变得冗长吗?我不这么认为。它更像是一本索引词典,而不是其他任何东西。如果你担心它会变得杂乱无章,你可以随时考虑使用。我应该在service worker或页面中附加的js文件中在哪里编写此函数?我建议这是最好的方法+1给你瓦迪姆克