"自我"关键字在WebWorkers中意味着什么

Ala*_*kas 4 javascript self web-worker

我不明白7,8,9行:

var worker = new Worker('doWork.js');

worker.addEventListener('message', function(e) {
  console.log('Worker said: ', e.data);   // Here it send's the data.
}, false);

worker.postMessage('Hello World'); // Send data to our worker.



 //7 self.addEventListener('message', function(e) {
   //8   self.postMessage(e.data);
   //9 }, false);
Run Code Online (Sandbox Code Playgroud)

做这段代码的是什么?1.什么代码行在第7行触发消息事件?2.在第8行的postMessage中传递了什么数据?3.自我做什么?

tax*_*ala 6

关键字self用于接近Worker的API,这意味着无论范围(即使它是一个闭包),您都可以访问Worker的API(我不确定您是否可以重新声明self其他内容并且松散Worker的API引用,但我相信它受JS保护,因此你无法覆盖它).

以下几行:

self.addEventListener('message', function(e) {
    self.postMessage(e.data);
}, false);
Run Code Online (Sandbox Code Playgroud)

只是为事件添加一个事件监听器'message',它将事件中的数据发送回webworker在其生成的上下文中的引用(最常见的是当前浏览器线程或父工作者).我们可以引用false布尔值确定的内容:

useCapture可选如果为true,则useCapture指示用户希望启动捕获.启动捕获后,指定类型的所有事件将被分派到已注册的侦听器,然后再分派到DOM树中它下面的任何EventTarget.向上冒泡树的事件不会触发指定使用捕获的侦听器.有关详细说明,请参阅DOM Level 3事件和JavaScript事件顺序.如果未指定,则useCapture默认为false.

注意:对于附加到事件目标的事件侦听器; 事件处于目标阶段,而不是捕获和冒泡阶段.无论useCapture参数如何,目标阶段中的事件都将触发元素上的所有侦听器.

注意:useCapture仅在主要浏览器的更新版本中成为可选项; 例如,它在Firefox 6之前不是可选的.您应该提供此参数以获得最广泛的兼容性.

wantsUntrusted 如果为true,则侦听器将接收由Web内容调度的合成事件(对于chrome,默认值为false,对于常规Web页面,默认值为true).此参数仅在Gecko中可用,主要用于加载项中的代码和浏览器本身.有关示例,请参阅特权页和非特权页之间的交互.

来自:https://developer.mozilla.org/en-US/docs/Web/API/EventTarget/addEventListener

关键字的更多技术说明self:

WorkerGlobalScope接口的self只读属性返回对WorkerGlobalScope本身的引用.大多数情况下,它是特定的范围,如DedicatedWorkerGlobalScope,SharedWorkerGlobalScope或ServiceWorkerGlobalScope.

引用自:https://developer.mozilla.org/en-US/docs/Web/API/WorkerGlobalScope/self