The principle is as follows
// to create an event of type htmlevents var evt = document.createevent ("htmlevents"); // initializing a custom EEE event false false );
Event Bindings
Document.addeventlistener ("Eee", function(e) { console.log (e)})
Document Tag trigger event (run code trigger directly)
Document.dispatchevent (EVT);
There is no way to pass a parameter and then do a package.
class Eventemitter {constructor () { This. evt = Document.createevent ("htmlevents")} on (type, fn) { This. evt.initevent (Type,false,false); Document.addeventlistener (Type, ()={fn ( This. Data)},false)} emit (type, data) { This. data =Data Document.dispatchevent ( This. evt)} } Const EVT=NewEventemitter () Evt.on (' ABC ', (data) ={console.log (data)//{a:1}}) Evt.emit (' abc ', {a:1})
There's a problem, you can't bind multiple events, just make a map record.
//as followsclass Eventemitter {constructor () {//Statistical Event Map This. Evts =NewMap}//Registering EventsOn (type, fn) {let evt= Document.createevent ("htmlevents") evt.initevent (type,false,false) This. Evts.set (Type, {evt, fn}) Document.addeventlistener (type, ()= FN ( This. Data),false) } //Triggering Eventsemit (type, data) {if(! This. Evts.has (Type)) { return false } This. data =Data Document.dispatchevent ( This. Evts.get (Type). evt)} //Delete EventRemove (type) {Document.removeeventlistener (type), This. Evts.get (Type). FN,false) This. Evts.Delete(Type)}} Const EVT=NewEventemitter () Evt.on (' ABC ', (data) ={Console.log (' ABC ', data)}) Evt.on (' AAA ', (data) ={Console.log (' AAA ', data)}) Evt.emit (' aaa ', {aaa:1})//AAA {aaa:1} evt.emit (' abc ', {a:1})//abc {a:1} evt.emit (' abc ', {ddf:1 }) //ABC {DDF:1}
evt.emit (' FFG ', {ddd:1 }) //No Print
Evt.remove (' abc ') //delete
Evt.emit (// no print
Custom Event JS