网站搜索

javascript - 使用 “this” 或 “window” 分发自定义事件?


当我创建一个 web 组件(我特别使用 lit/lit-element)并触发一个自定义事件时,我可以:

从 window 派发事件:

const evt = new CustomEvent("my-custom-event", {detail: "some-data"});
window.dispatchEvent(evt);

或者从 Web 组件本身 (this) 派发事件:

const evt = new CustomEvent("my-custom-event", {detail: "some-data"});
this.dispatchEvent(evt);

有什么理由让我想做这个而不是那个吗?

答案#1

可以使用 window 作为事件分发器来分发自定义事件,并添加处理这些事件的处理程序。

window.addEventListener("xyz", event => console.log(event.detail));

event = new CustomEvent("xyz", {
  detail: {
    action: "didInitialize",
    payload: 3
  }
});

window.dispatchEvent(event);

输出 :

{action: 'didInitialize', payload: 3}

该事件具有timeStamp以及所有常规事件属性。