我不理解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.自我在这做什么?
答案 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