🆘 Как создать Pull Request
Мы очень хотим, чтобы код вы написали сами, а не пользовались внешними библиотеками.
Прежде чем отправлять решение, проверьте его на соответствие общим требованиям.
Когда вы создадите или обновите пулл-реквест, он автоматически будет проверен на соответствие кодстайлу и базовую работоспособность. Результаты вы увидите внизу:
Проверить можно и вручную:
// Устанавливаем проверяльщик
npm install
// Проверяем
npm test
// В результате выведутся ошибки, если они есть
// Если какие-либо ошибки будут непонятны – смело спрашиваем у ментора
От вечеринок и мальчишников возвращаемся в мрачные стены университета — время слушать лекцию.
В файле index.js
вас ждут студенты, готовые внимать каждому слову преподавателя:
var daria = {
focus: 5
};
lecturer.on('begin', daria, function () {
this.focus += 1;
});
Студента можно подписать на событие, производимое преподавателем (например, начало лекции или показ нового слайда) — то есть указать, какая функция должна быть вызвана при наступлении этого события.
Ваша задача — реализовать несколько методов:
- подписка на событие —
on
- отписка от события —
off
- вызов события —
emit
var getEmitter = require('./emitter');
var lecturer = getEmitter();
// подписываем студента daria на событие slide
lecturer.on('slide', daria, function () {
console.log('Новый слайд!');
});
// вызываем событие slide
lecturer.emit('slide'); // 'Новый слайд!'
// отписываем студента daria от события slide
lecturer.off('slide', daria);
// вызываем событие slide
lecturer.emit('slide'); // обработчик не выполнился
Чтобы задания не казалось совсем простым, вам также нужно реализовать поддержку пространства имён.
lecturer.on('slide', daria, function () {
console.log('Новый слайд!');
});
lecturer.on('slide.funny', daria, function () {
console.log('Новый смешной слайд!');
});
lecturer.emit('slide'); // 'Новый слайд!'
lecturer.emit('slide.funny'); // 'Новый смешной слайд!'
// 'Новый слайд!'
lecturer.emit('slide.text'); // 'Новый слайд!'
Подробности вас ждут в файле index.js.
Необходимо реализовать два дополнительных метода эмиттера. Оба метода работают аналогично on
, но обладают некоторыми особенностями.
lecturer.several('slide', daria, function () {
console.log('Новый слайд!');
}, 2); // обработчик должен выполнится только дважды
lecturer.emit('slide'); // 'Новый слайд!'
lecturer.emit('slide'); // 'Новый слайд!'
lecturer.emit('slide'); // обработчик не выполнился
lecturer.through('slide', daria, function () {
console.log('Новый слайд!');
}, 2); // обработчик должен выполниться на второй, четвёртый, шестой (и так далее) раз
lecturer.emit('slide'); // обработчик не выполнился
lecturer.emit('slide'); // 'Новый слайд!'
lecturer.emit('slide'); // обработчик не выполнился
lecturer.emit('slide'); // 'Новый слайд!'
lecturer.emit('slide'); // обработчик не выполнился
lecturer.emit('slide'); // 'Новый слайд!'