2016-11-24 6 views
10

मैं सोच रहा था, 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); 

क्यों CustomEvent मौजूद है अगर यह साधारण घटना वस्तु के लिए कस्टम डेटा संलग्न करने के लिए आसान है:

तो, के बीच क्या अंतर है?

+0

संभावित डुप्लिकेट http://stackoverflow.com/questions/29856721/new-eventbuild से इस ग्राफिक देखें -vs-new-customeventbuild) – Endless

+2

नहीं, यह नहीं है - वह जवाब कहता है कि 'CustomEvent' "ईवेंट ऑब्जेक्ट में अधिक डेटा जोड़ने के लिए है"। हालांकि यह 'इवेंट' कक्षा के साथ किया जा सकता है। –

+2

मुझे पहले उदाहरण में लापता अर्धविराम से ट्रिगर किया गया था। –

उत्तर

7

यह वही नहीं है। आप एक असली 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 पर विचार करता है, जिसका आंतरिक रूप से उपयोग नहीं किया जाता है। लेकिन भविष्य की कल्पना कुछ नया जोड़ सकती है, और फिर आप गुणों का उपयोग कर उस आंतरिक डेटा को सेट करने में सक्षम नहीं हो सकते हैं।

एक कस्टमवेन्ट भी CustomElement.prototype से विरासत में मिलता है। यह केवल detail जोड़ता है और initCustomEvent बहिष्कृत करता है। लेकिन आप वहां अपनी खुद की विधियों या गुण जोड़ सकते हैं, जो अन्य घटनाओं द्वारा विरासत में नहीं मिलेगा। लेकिन मैं इसकी अनुशंसा नहीं करता, आपको उन वस्तुओं को संशोधित नहीं करना चाहिए जिनके आपके पास नहीं है।

तो मूल रूप से आप अन्य घटनाओं की तुलना में घटना को वर्गीकृत करने के लिए CustomEvent का उपयोग कर सकते हैं। ([नई घटना ('निर्माण') नए बनाम CustomEvent ('निर्माण')] के एक old spec

संबंधित मुद्दे