【发布时间】:2021-10-22 17:58:25
【问题描述】:
我的代码遇到了这个问题。 我想将创建的对象推送到一个数组中,然后显示它们。 问题是新创建的对象覆盖了旧的对象,我仍然有将对象推入数组的问题。
我的目标是创建输入并获取它们的值,并通过类创建对象,然后将它们推入数组、循环并在屏幕上显示。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial- scale=1.0" />
<title>Document</title>
</head>
<body>
<input type="text" id="title" />
<input type="text" id="author" />
<input type="number" id="pages" />
<h1>title :</h1>
<h2>Author :</h2>
<h3>Pages :</h3>
<button>Submit</button>
<script src="app.js"></script>
</body>
</html>
const title = document.querySelector("#title");
const author = document.querySelector("#author");
const pages = document.querySelector("#pages");
const submit = document.querySelector("button");
const h1 = document.querySelector("h1");
const h2 = document.querySelector("h2");
const h3 = document.querySelector("h3");
let myLibrary = [];
let Book = class {
constructor(title, author, pages) {
this.title = title;
this.author = author;
this.pages = pages;
this.words = [];
}
};
submit.addEventListener("click", () => {
if (title.value === "" || author.value === "" || pages.value === "") {
return;
}
if (title.value && author.value && pages.value) {
myLibrary.push(new Book(title.value, author.value, pages.value));
}
title.value = "";
author.value = "";
pages.value = "";
myLibrary.forEach((e) => {
h1.innerHTML = e.title;
h2.innerHTML = e.author;
h3.innerHTML = e.pages;
});
console.log(myLibrary);
});
【问题讨论】:
-
所以这行代码连续运行多次:
h1.innerHTML = e.title;。基本上第二个会覆盖第一个等等。e:myLibrary.forEach((e)是什么? -
其实不是因为h1/h2/h3和e.title/e.author/e.pages不同..
-
在
.forEach()中添加console.log(e)(或使用调试器单步执行您的脚本),您将看到问题。 -
它们彼此相邻出现,好像一切正常,但是当我按下提交时,最新的会覆盖旧的,而不是卡在它旁边..
标签: javascript arrays class object