20.08.2019, 21:50
|
Аспирант
|
|
Регистрация: 15.04.2019
Сообщений: 72
|
|
Помогите ПЛИЗ новичку с EventEmitter
Здравствуйте. Недавно изучаю Node.js. Просьба объяснить построчно, что происходит на каждой строке кода. Проблемы вызывает .emit и .on, из документации я не разобрался, что они делают. То, что со стандартным js связано, вроде как я уловил.
const EventEmitter = require("events") //цепляемся к модулю events
class Logger extends EventEmitter{ //наследование нового класса от того, к чему мы "прицепились" строчкой выше
log(message) // объект log, который является "ключом" к функции и названием функции одновременно
{this.emit("message", `${message} ${Date.now()}`)} // Не понятно
}
const logger = new Logger() //переменная из класса, тут понятно
logger.on("message", data=>{ //Тут тоже не понял, к чему слово "message", а дальше вроде ясно: указываем, что будет выводится в
//консоль инфа, которую задаем строкой ниже
console.log(data)
} )
logger.log("Прослушано") //обращаемся к функции из второй строки для выводного сообщения
Последний раз редактировалось Иса Мирзоев, 20.08.2019 в 22:07.
|
|
20.08.2019, 23:25
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,662
|
|
"message" это тип события, как "click" и тд. Вообще это типичный интерфейс, много где используется, обычно как минимум 3 метода присутствуют - это добавить, удалить, вызвать событие. Например, в jquery это .on(), .off(), .trigger() соответственно, в node.js это .on(), .off(), .emit(), даже нативно есть что-то подобное .addEventListener(), .removeEventListener(), .dispatchEvent(), суть у них одна. Попробуй сам написать простенький EventEmitter, и поймешь как все они работают.
|
|
20.08.2019, 23:38
|
Аспирант
|
|
Регистрация: 15.04.2019
Сообщений: 72
|
|
Значит .on добавляет событие, а .emit его вызывает. Становится яснее. Потыкал попроще события и заработало. Просто в курсе, по которому я учу Node был вот этот слегка накрученный код (лично для меня, плохо знающего ES6). Попробую, спс. Вроде прояснилось))
|
|
21.08.2019, 00:04
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,662
|
|
Например, этот интерфейс может быть примесью, как раз в учебнике есть подходящий пример, можно в общих чертах понять как он устроен, а может быть и самостоятельным классом как это в node.js, вообще много где встречается, когда вся иерархия наследования начинает строиться с такого класса, например, даже html-элементы так устроены, там он называется EventTarget (выше только Object):
alert(HTMLElement.prototype.__proto__.__proto__.__proto__.constructor);
Последний раз редактировалось Rise, 21.08.2019 в 00:09.
|
|
21.08.2019, 00:11
|
Аспирант
|
|
Регистрация: 15.04.2019
Сообщений: 72
|
|
Спасибо, гляну) А зачем наследоваться? Нельзя везде использовать один и тот же модуль, вместо того, чтобы свойства модуля наследовать в классы и работать с классами? Я пока только 1 причину вижу - в наследуемый класс можно вставлять свой функционал, дополнительный плюс к унаследованному. Хотя по идее через прототип можно и в первоначальный модуль добавить требуемый функционал. Смысла не вижу в общем в наследовании на этом этапе моего понимания языка(
|
|
21.08.2019, 00:39
|
Профессор
|
|
Регистрация: 07.11.2013
Сообщений: 4,662
|
|
Ну в этом смысл наследования делить общие методы, например, EventTarget делится между Element, Document, Window, XMLHttpRequest и другими:
alert(Document.prototype.__proto__.__proto__.constructor);
alert(Window.prototype.__proto__.__proto__.constructor);
alert(XMLHttpRequest.prototype.__proto__.__proto__.constructor);
|
|
|
|