You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行JS图书馆功能代码报Uncaught ReferenceError: Book1未定义问题

错误原因

    1. 作用域不匹配:Book1/Book2/Book3是在addBookToLibrary函数内部的newBook方法里用const声明的块级作用域变量,全局作用域下无法直接访问,你在全局执行myLibrary.push(Book1, Book2, Book3)自然会提示变量未定义。
    1. 构造函数调用逻辑错误:实例化书籍对象需要调用你提前定义的Book构造函数,你写的new Book1()完全把实例名和构造函数搞反了,Book1是你要创建的实例,不是构造函数,同理Book2/Book3的实例化写法全错。
    1. 关键字拼写错误:JS中this是全小写关键字,你写的大写This会被识别为未定义的变量,直接报错。
    1. 函数未执行:你定义了addBookToLibrary之后没有主动调用,里面的newBook方法也没有执行逻辑,就算作用域没问题,三个书籍实例也不会被创建。
    1. 参数传递错误:Book3实例创建时你把author/pages/read三个参数塞到了同一个字符串里,不符合Book构造函数的入参要求。
    1. info方法返回逻辑错误:return name, author, pages, read的写法只会返回最后一个参数read,如果要返回完整信息需要拼接为字符串或者返回对象。

修正后可运行代码

let myLibrary = [];

function Book(name, author, pages, read) {
  this.name = name;
  this.author = author;
  this.pages = pages;
  this.read = read;
  this.info = function () {
    return `${this.name} | ${this.author} | ${this.pages}页 | ${this.read}`;
  };
}

function addBookToLibrary() {
  // 直接创建实例并推入数组,不需要额外嵌套无用的newBook方法
  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();

// 遍历输出
for (let i in myLibrary) {
  console.log(myLibrary[i].info() + " ");
}

内容的提问来源于stack exchange,提问作者Qwop

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:24:04