什么是自我' WebWorkers中的关键字含义

时间:2015-06-09 14:54:17

标签: javascript web-worker self

我不理解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);

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

1 个答案:

答案 0 :(得分:6)

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

以下几行:

self.addEventListener('message', function(e) {
    self.postMessage(e.data);
}, false);

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

  

useCapture可选如果为true,则useCapture表示用户希望   开始捕获。在开始捕获之后,所有事件都发生了   指定的类型将被分派到注册的侦听器之前   被分派到DOM树下面的任何EventTarget。活动   向上冒泡通过树不会触发听众   指定使用捕获。请参阅DOM Level 3事件和JavaScript事件   订购详细说明。如果未指定,请使用捕获   默认为false。

     
    

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

         

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

  
     

wantsUntrusted如果为true,则侦听器将接收合成事件   由web内容调度(chrome的默认值为false,为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