我想知道CustomEvent
的目的是什么,因为它可以很好地被老Event
模仿。
那么,有什么区别:
var e = new Event("reload");
e.detail = {
username: "name"
};
element.dispatchEvent(e);
和
var e = new CustomEvent("reload", {
detail: {
username: "name"
}
});
inner.dispatchEvent(e);
如果很容易将自定义数据附加到普通的Event对象,为什么CustomEvent
存在?
答案 0 :(得分:21)
它不一样。您无法设置真实CustomEvent的detail
:
var event = new CustomEvent('myevent', {detail:123});
event.detail = 456; // Ignored in sloppy mode, throws in strict mode
console.log(event.detail); // 123
var event = new Event('myevent');
event.detail = 123; // It's not readonly
event.detail = 456;
console.log(event.detail); // 456

是的,您可以使用Object.defineProperty
。但我想重点是CustomEvent
的论点应该设置一些事件的内部数据。现在它只考虑内部未使用的detail
。但未来的规范可能会增加一些新内容,然后您可能无法通过使用属性来设置内部数据。
CustomEvent也继承自CustomElement.prototype
。这只会添加detail
和已弃用的initCustomEvent
。但是您可以在其中添加自己的方法或属性,这些方法或属性不会被其他事件继承。但是我不推荐这个,你不应该修改你不拥有的对象。
所以基本上你可以使用CustomEvent
来对事件进行不同于其他事件的分类。请参阅old spec