5

好的,这有点难以解释,但是在这里,我正在使用网络工作者,我在我的网络工作者脚本中定义了函数,我想调用一个特定的函数,将另一个函数作为参数传递,问题是我正在尝试使用 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) {

}

所以我知道这段代码是错误的并且不起作用,但我想你对我想要实现的目标有所了解。

4

2 回答 2

3

我会做这样的事情:

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]();
}

或者用函数创建一个单独的对象,但确保它是一个对象的方法,那么这样调用就变得容易了。

于 2013-08-01T16:37:31.737 回答
2

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

http://www.eslinstructor.net/vkthread/

最好的祝福,

——瓦迪姆

于 2013-09-16T06:38:19.967 回答