Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 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.
Ответить с цитированием
  #2 (permalink)  
Старый 20.08.2019, 23:25
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

"message" это тип события, как "click" и тд. Вообще это типичный интерфейс, много где используется, обычно как минимум 3 метода присутствуют - это добавить, удалить, вызвать событие. Например, в jquery это .on(), .off(), .trigger() соответственно, в node.js это .on(), .off(), .emit(), даже нативно есть что-то подобное .addEventListener(), .removeEventListener(), .dispatchEvent(), суть у них одна. Попробуй сам написать простенький EventEmitter, и поймешь как все они работают.
Ответить с цитированием
  #3 (permalink)  
Старый 20.08.2019, 23:38
Аспирант
Отправить личное сообщение для Иса Мирзоев Посмотреть профиль Найти все сообщения от Иса Мирзоев
 
Регистрация: 15.04.2019
Сообщений: 72

Значит .on добавляет событие, а .emit его вызывает. Становится яснее. Потыкал попроще события и заработало. Просто в курсе, по которому я учу Node был вот этот слегка накрученный код (лично для меня, плохо знающего ES6). Попробую, спс. Вроде прояснилось))
Ответить с цитированием
  #4 (permalink)  
Старый 21.08.2019, 00:04
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 07.11.2013
Сообщений: 4,662

Например, этот интерфейс может быть примесью, как раз в учебнике есть подходящий пример, можно в общих чертах понять как он устроен, а может быть и самостоятельным классом как это в node.js, вообще много где встречается, когда вся иерархия наследования начинает строиться с такого класса, например, даже html-элементы так устроены, там он называется EventTarget (выше только Object):
alert(HTMLElement.prototype.__proto__.__proto__.__proto__.constructor);

Последний раз редактировалось Rise, 21.08.2019 в 00:09.
Ответить с цитированием
  #5 (permalink)  
Старый 21.08.2019, 00:11
Аспирант
Отправить личное сообщение для Иса Мирзоев Посмотреть профиль Найти все сообщения от Иса Мирзоев
 
Регистрация: 15.04.2019
Сообщений: 72

Спасибо, гляну) А зачем наследоваться? Нельзя везде использовать один и тот же модуль, вместо того, чтобы свойства модуля наследовать в классы и работать с классами? Я пока только 1 причину вижу - в наследуемый класс можно вставлять свой функционал, дополнительный плюс к унаследованному. Хотя по идее через прототип можно и в первоначальный модуль добавить требуемый функционал. Смысла не вижу в общем в наследовании на этом этапе моего понимания языка(
Ответить с цитированием
  #6 (permalink)  
Старый 21.08.2019, 00:39
Профессор
Отправить личное сообщение для Rise Посмотреть профиль Найти все сообщения от Rise
 
Регистрация: 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);
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу найти ошибку. помогите плиз uuusseerr Серверные языки и технологии 1 26.10.2016 10:44
Помогите новичку плиз!!!!!!!!!!!!! Юрий Манылов Общие вопросы Javascript 1 18.12.2012 11:37
Помогите новичку! Анатолий Саратовцев Events/DOM/Window 7 04.08.2012 17:46
Помогите плиз mesq Оффтопик 6 28.06.2010 04:58
Помогите новичку с выпадающим списком interest Элементы интерфейса 5 19.05.2010 13:15