Skip to content

Latest commit

 

History

History
 
 

prototypes-constructors

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 

Домашнее задание к лекции «Прототипы, конструкторы»

Важно: каждая задача выполняется в виде отдельного проекта с собственным GitHub репозиторием.

Важно: код должен проходить ESLint без ошибок.

Важно: тесты должны обеспечивать 100% покрытие тестируемых функций по строкам.

Важно: решения должны быть построены на базе шаблона Webpack.

В личном кабинете на сайте netology.ru в поле комментария к домашней работе вставьте ссылки на ваш GitHub-проекты.


Функция-конструктор

Легенда

В целях упрощения поддержки вашей игры и разрастающегося количества доступных персонажей, вы решили внедрить единые правила создания персонажей, и, конечно же, вам в этом помогут конструкторы.

Описание

Реализуйте функцию-конструктор персонажей:

function Character(name, type) {
  // TODO: add logic here
  this.name = name;
  this.type = type;
}

Ваша функция-конструктор должна соответствовать следующим требованиям:

  1. name - строка, min - 2 символа, max - 10
  2. type - один из типов (строка): Bowman, Swordsman, Magician, Daemon, Undead, Zombie

В случае, если передаются некорректные значения, функция конструктор должна выбрасывать ошибку (throw new Error(...)) и не давать возможность создавать объект.

В вашей функции автоматически должны устанавливаться значения следующих полей:

  1. health: 100
  2. level: 1
  3. Атака/защита:
    1. Bowman: 25/25
    2. Swordsman: 40/10
    3. Magician: 10/40
    4. Undead: 25/25
    5. Zombie: 40/10
    6. Daemon: 10/40

Не забудьте написать unit-тесты, которые обеспечивают 100% покрытие функции, которую вы тестируете.


Прототипы

Легенда

Теперь, когда у вас есть функция-конструктор, вы можете воспользоваться возможностями прототипов для реализации общих функций для разных объектов. Давайте реализуем функцию, которая наносит "урон" объекту в результате атаки на него

Описание

В качестве отправной точки используйте следующую реализацию:

function Character(name, type) {
    this.name = name;
    this.type = type;
    this.health = 100;
    this.attack = 10;
    this.defence = 40;
}

Реализуйте в прототипе Character функцию damage(points), которая меняет внутреннее состояние объекта (points - это урон, наносимый персонажу). Функция damage(points) ничего не возвращает и рассчитывает итоговое изменение жизни персонажа (health) по формуле: health -= points * (1 - defence / 100), учитывая, что значение health >= 0.

Не забудьте написать unit-тесты, которые обеспечивают 100% покрытие функции, которую вы тестируете.


JSDoc (задача со звёздочкой)

Важно: данная задача не является обязательной

Легенда

Как только вы приступаете к решению вопросов организации своего кода, жёстко встаёт вопрос о его документировании для участников вашей команды. Для этого есть много инструментов, но вы ваш выбор остановился на JSDoc.

Описание JSDoc

Установите JSDoc в вашей проект с помощью следующей команды: npm install --save-dev jsdoc

Создайте конфигурационный файл JSDoc - jsdoc.conf.json:

{
  "source": {
    "include": ["src/js"]
  },
  "opts": {
    "encoding": "utf8",
    "destination": "docs",
    "recurse": true
  }
}

Создайте файл character.js с вашим приложением в каталоге js. В нём расположите заглушку функции:

/**
 * <Общее описание>
 * 
 * @param <описание параметра>
 * @param <описание параметра>
 * 
 * @throws <описание генерируемой ошибки>
 */ 
function Character(name, type) {
  this.name = name;
  this.type = type;
}

Задайте скрипт npm в package.json: "doc": "jsdoc -c jsdoc.conf.json"

Задокументируйте поведение функции-конструктора Character с использованием следующих doc-комментариев:

  1. @param {<тип>} <имя> - описание параметра (см. документацию)
  2. @throws {<тип>} - описание генерируемого исключения (см. документацию)

Удостоверьтесь, что документация генирируется, запустив: npm run doc

Добавьте каталог docs в .gitignore.