Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

urfu-2015/javascript-tasks-5

Folders and files

NameName
Last commit message
Last commit date

Latest commit

History

6 Commits

Repository files navigation

Задача к лекции «This / Bind / Call / Apply» – «Пора на лекцию»

🆘 Как создать Pull Request
⚠️ При создании PullRequest'а не забудьте указать ваши имя и фамилию.

Общие требования

Мы очень хотим, чтобы код вы написали сами, а не пользовались внешними библиотеками.

Прежде чем отправлять решение, проверьте его на соответствие общим требованиям.

Когда вы создадите или обновите пулл-реквест, он автоматически будет проверен на соответствие кодстайлу и базовую работоспособность. Результаты вы увидите внизу:

Если всё хорошо:
2015年10月08日_1845

Если всё плохо:
2015年10月08日_1841

Проверить можно и вручную:

// Устанавливаем проверяльщик
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, но обладают некоторыми особенностями.

several — вызывает обработчик события n раз

lecturer.several('slide', daria, function () {
 console.log('Новый слайд!');
}, 2); // обработчик должен выполнится только дважды
lecturer.emit('slide'); // 'Новый слайд!'
lecturer.emit('slide'); // 'Новый слайд!'
lecturer.emit('slide'); // обработчик не выполнился

through — вызывает обработчик события каждый n-й раз

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'); // 'Новый слайд!'

About

Задача к лекции «This / Bind / Call / Apply» – «Пора на лекцию»

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

Contributors

AltStyle によって変換されたページ (->オリジナル) /