@kuramaa922

Как реализовать функционал работы с книгами в библиотеке через прототипы?

Реализуйте функционал для работы с книгами в библиотеке:

создание книги(добавление новой книги в библиотеку)
Выдача книги читателю
Получение книги от читателя
Получение у кого книга сейчас находится
Необходимо создать контруктор объектов Book, который будет создавать объекты со следующими полями:

name - имя книги
author - имя автора
year - год книги
reader - текущий читатель книги(у кого она на руках) - если она сейчас свободна - должно быть равно null
Необходимо реализовать на прототипе следующие методы работы с книгой:

isAvailable() // true/false - доступна ли книга для выдачи или она у кого-то на руках
takeBook(readerName) - должен выдавать книгу читателю, если она доступна для выдачи и записывать его имя в reader, возвращает true, если выдача книги возможна и она произведена, false, если книга уже выдана
returnBook() - регистрирует возврат книги, устанавливает reader в null, возвращает true, если книга была на руках, false если книга итак в библиотеке
changeBookName(newBookName) - изменяет название книги на newBookName, возвращает true/false, в зависимости от результата
changeAuthorName(newAuthorName) - изменяет имя автора на newAuthorName, возвращает true/false в зависимости от результата
getCurrentReader() - возвращает имя текущего читателя или null, если книга доступна для выдачи

function Book(name, author, year) {
  this.name = name
  this.author = author
  this.year = year
  this.reader = null
}

Book.prototype.isAvailable = function () {
  return !this.reader
}


Book.prototype.takeBook = function (readerName) {
  if (this.reader) {
    return false
  } else {
    this.reader = readerName
    return true
  }
}

Book.prototype.returnBook = function () {
  if (!this.reader) {
    this.reader = null
    return false
  } else {
    return true
  }
}

Book.prototype.changeBookName = function (newBookName) {
  if (this.reader)
            return false;
        this.name = newBookName;
        return true;
}

Book.prototype.changeAuthorName = function (newAuthorName) {
  if (this.reader)
            return false;
        this.author = newAuthorName;
        return true;
}

Book.prototype.getCurrentReader = function () {
  return this.reader
}

Ваш ответ не прошел тест!
FAIL test.js
  book
    ✓ должен создавать экземпляр Book без функций в нем (6ms)
    ✓ должен иметь прототип со всеми функциями (4ms)
    ✕ должен показывать актуальное состояние книги (7ms)
    ✕ должен выдавать значение текущего читателя (4ms)
    ✓ должен изменять имя автора (10ms)
    ✓ должен изменять имя книги (2ms)

  ● book › должен показывать актуальное состояние книги

    expect(received).toBe(expected) // Object.is equality

    Expected: false
    Received: true
       
    > 93 |     expect(book1.returnBook()).toBe(true);
         |                                                    ^

Привет, не могу понять, почему не проходят два теста, подскажите, пожалуйста
  • Вопрос задан
  • 303 просмотра
Решения вопроса 1
@syrexsoez
Перепиши returnBook вот так:
Book.prototype.returnBook = function () {
  if (!this.reader) {
    return false
  } else {
    this.reader = null
    return true
  }
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы