2016-11-24 207 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