Hoe wordt de JavaScript-methode .on() gedefinieerd?

In de jQuery-bibliotheek bestaat de functie niet, maar elk jQuery-object heeft deze essentiële methoden. In een andere thread werd gesteld dat .on() tot de node-API behoort, wat me in de war brengt, omdat het in de front-end kan worden gebruikt en ik niet eens const EventEmitter = require('events');en de jquery.min.js. Ik zou graag willen weten waarom bijvoorbeeld de strings ‘click’ of ‘mouseover’ geldige argumenten zijn.

Ook maakt de methode on() uitgebreid gebruik van callback-functies.
Bijvoorbeeld:
$('class').on('click', event => {...})

Ik zou graag willen begrijpen waarom het kan worden doorgegeven aan een lambda-functie of ‘event’ zoals hierboven vermeld.

Sommigen vinden de volgende bron misschien ook nuttig, maar het is niet zo eenvoudig en zorgde ervoor dat ik meer vragen dan antwoorden kreeg:
https://nodejs.org/docs/latest/api/events.html


Antwoord 1, autoriteit 100%

on-methode registreert een handler, een callback-functie met een specifieke handtekening. Zodra een gebeurtenis is geactiveerd, wordt een handler aangeroepen. Het ontvangt de benodigde gegevens als functieparameters (gewoonlijk eventobject).

jQuery en Node event emitter zijn op geen enkele manier gerelateerd, ze hebben allebei de onmethode omdat het een conventionele manier is voor een methode die event handlers toevoegt.

Een naïeve implementatie die laat zien hoe het werkt:

const emitter = {
  handlers: {},
  on(eventName, handler) {
    if (!this.handlers[eventName])
      this.handlers[eventName] = [];
    this.handlers[eventName].push(handler);
  },
  emit(eventName, data) {
    for (const handler of this.handlers[eventName])
      handler(data);
  }
};
emitter.on('foo', data => console.log(data.text));
emitter.emit('foo', { text: 'Foo event triggered' });

Other episodes