Défi
Énoncé
Implémenter une classe EventEmitter disposant de trois méthodes : on(event, fn) enregistre un gestionnaire pour un événement nommé, emit(event, ...args) appelle tous les gestionnaires enregistrés pour cet événement avec les arguments fournis, off(event, fn) désenregistre un gestionnaire précis. Plusieurs gestionnaires peuvent coexister pour le même événement. Pas de module events de Node.js ni de dépendance externe.
Contraintes
- ES2015+ (Node.js 18 ou navigateur moderne).
- Pas d'import de
require("events")ni d'aucune bibliothèque. offdoit retirer uniquement le gestionnaire passé en argument (comparaison par référence), pas tous ceux de l'événement.emitne lève pas d'exception si aucun gestionnaire n'est enregistré pour l'événement.- Le stockage interne des gestionnaires est laissé au choix (
Map, objet, etc.).
Exemple
Scénario de démonstration : enregistrer un gestionnaire sur l'événement
salut, émettre salut avec "Alice", désenregistrer ce gestionnaire, puis
émettre salut avec "Bob".
Sortie attendue :
Bonjour, Alice !
Une seule ligne : le second emit ne produit rien puisque le gestionnaire a
été retiré. Une sortie à deux lignes signale un off qui ne retire pas, une
sortie vide un on qui n'enregistre pas.