Важно: каждая задача выполняется в виде отдельного проекта с собственным GitHub репозиторием.
Важно: код должен проходить ESLint без ошибок.
Важно: на задачи данного раздела писать авто-тесты не нужно.
Важно: решения должны быть построены на базе шаблона Webpack.
В личном кабинете на сайте netology.ru в поле комментария к домашней работе вставьте ссылки на ваши GitHub-проекты.
В этом задании предполагается, что все персонажи содержат следующий набор полей:
const char = {
name: 'Лучник',
type: 'Bowman',
health: 50,
level: 1,
attack: 40,
defence: 10
}
Для поддержки логики необходимо сделать объекты класса Team
(команда, в которой хранятся персонажи противника на текущий раунд) итерируемыми. При итерации они должны выдавать персонажей.
Реализуйте итератор в классе Team
, который по одному выдаёт персонажей (объекты типа Character
).
Реализовывать итераторы не так уж здорово, правда? Давайте посмотрим, как нам могут помочь генераторы при переборе.
Используйте следующую заготовку для организации перебора класса Team
:
class Team {
...
*[Symbol.iterator]() {
// это генератор
// и здесь есть доступ к this
// остаётся лишь правильно написать yield
}
}
Важно: данная задача не является обязательной
Как вы знаете, объекты, позволяющие организовать итерирование, содержат метод с "именем" Symbol.iterator
. Напишите функцию canIterate
, которая определяет, соответствует ли объект протоколу итерирования, возвращая, соответственно, true
/false
.
Примеры использования:
canIterate(new Map()); // true
canIterate(new Set()); // true
canIterate(null); // false
canIterate(10); // false
canIterate("Netology"); // true