Ошибка неперехваченной ссылки: Книга 1 не определена

#javascript

#язык JavaScript

Вопрос:

Я запускаю код в своем веб-браузере, чтобы посмотреть, будут ли отображаться книги, которые я поместил в свою библиотечную функцию. Однако самое первое, что он мне показывает, — это ошибка»Ошибка неперехваченной ссылки: Книга 1 не определена», хотя она определена в моей функции.Я не могу понять, что я сделал не так.

 let myLibrary = [];  function Book(name, author, pages, read) {  this.name = name;  this.author = author;  this.pages = pages;  this.read = read;  this.info = function () { return name, author, pages, read;  }; }  function addBookToLibrary(name, author, pages, read) {  This.newBook = function () {  const Book1 = new Book1(  "Rich Dad, Poor Dad",  "Robert Kiyosaki",  "235",  "Read"  );  const Book2 = new Book2("One Piece", "Eiichiro Oda", "23456", "Not Read");  const Book3 = new Book3("Bone", "Jeff Smith, 2352, Not Read");  }; }  myLibrary.push(Book1, Book2, Book3);  for (let i in myLibrary) {  console.log(myLibrary[i]   " "); }  

Комментарии:

1. Book1 = new Book1 — опечатка

2. new Book1 , new Book2 , new Book3 Откуда вы взяли идею о том, что именно так вы создадите новый экземпляр Book класса?

Ответ №1:

Вы объявляете свои константы book1 , book2 , и book3 внутри функции addBookToLibrary() , в определении This.newBook функции . Эти константы существуют только в контексте/среде функции и не могут быть напрямую связаны за ее пределами. Чтобы вызвать свою push() функцию с помощью этих книг, вы должны переместить эту строку внутри функции. Кроме того, вы должны вызывать конструктор для своего Book класса, а не имя объекта: const Book1 = new Book()

 function addBookToLibrary(name, author, pages, read) {  This.newBook = function () {  const Book1 = new Book(  "Rich Dad, Poor Dad",  "Robert Kiyosaki",  "235",  "Read"  );  const Book2 = new Book("One Piece", "Eiichiro Oda", "23456", "Not Read");  const Book3 = new Book("Bone", "Jeff Smith, 2352, Not Read"); myLibrary.push(Book1, Book2, Book3);  }; }  

Ваш код также никогда не вызывает addBookToLibrary() в любом случае, поэтому Book1, Book2, Book3 он не может существовать ни в какой среде, пока вы его не запустите.