2016-11-24 19 views
10

Merak ediyorum, CustomEvent'un amacı nedir, çünkü iyi eski Event tarafından kolayca taklit edilebilir. CustomEvent sıradan Olay nesneye özel verileri eklemek kolaydır eğer mevcut mu NedenEvent vs CustomEvent

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

ve

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

:

Yani, arasındaki fark nedir?

+0

Olası yinelenen (http://stackoverflow.com/questions/29856721/new-eventbuild gelen bu grafiği bakın -vs-new-customeventbuild) – Endless

+2

hayır öyle değil - bu cevap 'CustomEvent' 'olay nesnesine daha fazla veri eklemek için olduğunu söylüyor. Bu 'Etkinlik' sınıfı ile yapılabilir. –

+2

İlk örnekte eksik noktalı virgül tarafından tetiklendim. –

cevap

7

Aynı şey değil. Sen gerçek CustomEvent ait detail ayarlayamıyor:

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

Evet, Object.defineProperty kullanabilirsiniz. Ama sanırım buradaki nokta, CustomEvent numaralı argümanın, olayın bazı dahili verilerini oluşturması gerektiğidir. Şimdi sadece dahili olarak kullanılmayan detail'u dikkate alıyor. Ancak gelecekteki bir özellik yeni bir şey ekleyebilir ve daha sonra özellikleri kullanarak bu iç verileri ayarlayamayabilirsiniz.

Bir CustomEvent ayrıca CustomElement.prototype'dan devralınır. Bu sadece detail ve kullanımdan kaldırılmış initCustomEvent ekler. Ancak, kendi yöntemlerinizi veya mülklerinizi buraya ekleyebilir ve başka etkinlikler tarafından devralınmayacaksınız. Ama bunu önermiyorum, sahip olmadığınız nesneleri değiştirmemelisiniz.

Temel olarak, olayı diğer olaylardan farklı olarak sınıflandırmak için CustomEvent'u kullanabilirsiniz. [Yeni CustomEvent vs yeni Olay ('inşa') ('yapı')] bir old spec