Cette fois, je vais vous apporter l'analyse de la logique sous-jacente de JavaScript EventEmitter et les notes de l'analyse de la logique sous-jacente de JavaScript EventEmitter Ce qui suit est un cas pratique, prenons. un regard.
Qu'est-ce qu'un émetteur d'événement ?L'émetteur d'événement semble déclencher un événement, et tout le monde peut écouter cet événement. Imaginez un scénario dans lequel, dans votre code asynchrone, vous « appelez » certains événements à se produire et laissez d'autres parties de vous entendre votre « appel » et enregistrer leurs pensées. Il existe un certain nombre d'implémentations différentes du modèle Event Emitter à des fins différentes, mais l'idée de base est de fournir un cadre avec la gestion des événements et la possibilité de s'y abonner. Ici, notre objectif est de créer notre propre émetteur d'événements pour en comprendre le secret. Voyons donc comment fonctionne le code ci-dessous.let input = document.querySelector("input[type="text"]"); let button = document.querySelector("button"); let h1 = document.querySelector("h1"); button.addEventListener("click", () => { emitter.emit("event:name-changed", { name: input.value }); }); let emitter = new EventEmitter(); emitter.subscribe("event:name-changed", data => { h1.innerHTML = `Your name is: ${data.name}`; });
class EventEmitter { constructor() { this.events = {}; } }
subscribe(eventName, fn) { if (!this.events[eventName]) { this.events[eventName] = []; } this.events[eventName].push(fn); }
" et transmet un rappel qui sera appelé lorsque quelqu'un appelle event:name-changed
(ou scream) le rappel est appelé lorsque l'événement se produit. emit
JavaScript est que la fonction est le premier objet, on peut donc passer la fonction en paramètre d'une autre fonction comme avant avec notre méthode d'abonnement .
Si cet événement n'est pas enregistré, nous devons lui définir une valeur initiale pour la première fois, le nom de l'événement comme clé et initialiser un tableau vide qui lui est attribué, puis nous y mettons la fonction tableau afin que nous voulions appeler cet événement via émettre. Fonction d'appelemit(eventName, data) { const event = this.events[eventName]; if (event) { event.forEach(fn => { fn.call(null, data); }); } }
subscribe(eventName, fn) { if (!this.events[eventName]) { this.events[eventName] = []; } this.events[eventName].push(fn); return () => { this.events[eventName] = this.events[eventName].filter(eventFn => fn !== eventFn); } }
let unsubscribe = emitter.subscribe("event:name-changed", data => console.log(data)); unsubscribe();
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!