#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
он не может существовать ни в какой среде, пока вы его не запустите.