2016-11-24 92 views
10

我在想,CustomEvent的目的是什么,因为它可以很容易地被老的Event所模拟。事件vs自定义事件

那么,是什么样的区别:

var e = new Event("reload"); 
e.detail = { 
    username: "name" 
}; 
element.dispatchEvent(e); 

var e = new CustomEvent("reload", { 
    detail: { 
     username: "name" 
    } 
}); 
inner.dispatchEvent(e); 

为什么CustomEvent存在,如果它是很容易的定制数据附加到普通的事件对象?

+0

可能的复制(http://stackoverflow.com/questions/29856721/new-eventbuild -vs-new-customeventbuild) – Endless

+2

不,它不是 - 那答案说'CustomEvent'是“为事件对象添加更多数据”。虽然这可以通过“Event”类来完成。 –

+2

我在第一个例子中被丢失的分号触发。 –

回答

7

这是不一样的。你不能设置一个真正的自定义事件的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