Javascript 我需要实现什么接口来允许对象通过WebWorker';什么是邮递信息?
在javascript中,您可以使用浏览器中的Javascript 我需要实现什么接口来允许对象通过WebWorker';什么是邮递信息?,javascript,interface,web-worker,Javascript,Interface,Web Worker,在javascript中,您可以使用浏览器中的worker.postMessage和worker中的postMessage在工作线程和主线程之间传递对象 我一直在玩,不仅postMessage传递了数组和对象,甚至还传递了RegExp实例,所以我假设这些对象实现了一些接口。例如,对于字符串转换,可以实现.toString方法: "" + {toString: function() {return "Hello world!"}}; //prints `Hello world!` JSON.st
worker.postMessage
和worker中的postMessage
在工作线程和主线程之间传递对象
我一直在玩,不仅postMessage
传递了数组和对象,甚至还传递了RegExp实例,所以我假设这些对象实现了一些接口。例如,对于字符串转换,可以实现.toString
方法:
"" + {toString: function() {return "Hello world!"}}; //prints `Hello world!`
JSON.stringify({toJSON: alert});
//Throws `TypeError: 'alert' called on an object that does not implement interface Window.`
// - demonstrating that toJSON is being called
类似地,您可以实现toJSON
方法:
"" + {toString: function() {return "Hello world!"}}; //prints `Hello world!`
JSON.stringify({toJSON: alert});
//Throws `TypeError: 'alert' called on an object that does not implement interface Window.`
// - demonstrating that toJSON is being called
我的问题是,我应该为postMessage
实现什么才能让我的Player
类通过通信通道:
function Player(name) {
this.name = name;
}
Player.prototype = Object.create(EventEmitter2.prototype);
我特意在这里添加了继承部分——我需要对象保持某种东西的实例,而不仅仅是数据持有者。就像使用
RegExp
一样,我需要通过我定义的一个或多个方法来重构它——如果在新范围中没有定义所需的上下文(类型定义,例如EventEmitter2
),则必须失败。唉,您不能。您不能指定自己的序列化器/反序列化器(或封送器/反封送器)。不过,您可以保留对象结构,这在大多数情况下已经足够好了,但构造函数和函数之类的信息不会传递
我是这样知道的:
规范中负责web工作人员的postMessage
(顺便说一句,它与窗口的postMessage
相同)的部分可以在这里找到:
这是很多无趣的技术内容,但重要的是:
让message clone作为获取消息参数[…]的结构化克隆的结果
结构化克隆算法如下所示:
正如你所看到的,情况看起来相当严峻。它检查内置对象和值(如Number或Blob),并相应地构造它们。可以传递任意对象,但只保留其结构
那么,你能做什么
postMessage
等。事实上,这并不太难,而且是一个很好的练习谢谢你的回答。我肯定会给你+1,但我会在接受之前花点时间,以防有人会提出更多关于解决办法的想法。事实证明,出于性能原因,我当前的项目将只发送几个数字和字符串,并在两侧创建所有伪类实例。在另一个项目中,我可能只创建自己的序列化层。