2013-08-01 45 views
2

确定这是有点难以解释,但在这里不用,我使用的网络工作者,我有我的网络工作者脚本定义的功能,我想打电话给一个特定的功能在另一个函数传递作为参数,问题是我正在尝试使用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) { 

} 

所以我知道这个代码是错了,不会工作,但我想你有一个想法,我想要实现。

回答

2

我会做这样的事情:

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

或创建一个功能一个单独的对象,但要确保它是一个对象的方法,那么就很容易像调用。

+0

为十分感谢,如果我有20个奇函数它会得到详细的使用单个对象,具有20种方法? – Jack

+0

我不这么认为。它的行为更像索引字典而不是其他任何东西。而你总是可以看看使用['importScripts'(https://developer.mozilla.org/en-US/docs/Web/Guide/Performance/Using_web_workers#Importing_scripts_and_libraries)如果你担心它越来越混乱。 – kalley

+0

我应该在服务人员还是在页面附带的js文件中写入这个函数? –