如何通过Web-Workers传递自定义类实例?

时间:2015-08-11 22:49:56

标签: javascript buffer web-worker data-transfer arraybuffer

由于Web-Worker JSON在线程之间序列化数据,所以这样的事情不起作用:

worker.js

function Animal() {}
Animal.prototype.foobar = function() {}

self.onmessage = function(e) {
  self.postMessage({animal: new Animal()})  
}

main.js

let worker = new Worker('worker.js')

worker.onmessage = function(e) {
    console.log(e.data)
}

worker.postMessage('go!')

结果将是一个简单的对象,失去了foobar原型方法。

是否可以将自定义对象传回主线程而不会丢失其原型方法?就像,ArrayBuffer这可能吗?我不熟悉那些东西,所以我有点失落。

1 个答案:

答案 0 :(得分:1)

  1. 假设您对客户端和Web服务进行编程,您可以在两侧定义Animal函数
  2. 然后你可以添加到Animal.prototype(双方)toJson方法来传递你需要的信息来重新创建对象(并且可以选择一些属性来定义className)
  3. 您定义了一个使用反向过程的复活者
  4. 然后当你发布时,你必须总是JSON.stringify(e)
  5. 在onmessage中你是JSON.parse(m,reviver)

    |      AddOnFeature |
    |-------------------|
    | EnterpriseNotices |
    |    WeatherToPanel |