
在JavaScript中,this关键字的指向取决于其被调用的上下文。在类(class)的内部,this通常指向该类的当前实例。然而,在类的外部,尤其是在全局作用域或普通函数中,this的指向会有所不同,它不再与特定的类实例关联。
原始代码中尝试使用 peliHtml.innerHTML =${this.Film.title}`存在一个常见错误:在全局作用域下,this并不指向任何Film类的实例,更不可能通过this.Film来访问类本身或其静态属性(尽管Film在这里也不是一个静态属性)。因此,这会导致控制台报错,因为this.Film是undefined,无法从中读取title`属性。
正确的做法是,当我们需要访问某个特定对象实例的属性时,必须直接引用该实例变量,例如 film1.title。而当处理多个同类型对象时,将它们组织成一个集合(如数组)是更优的选择。
为了有效地在HTML中展示多个对象的数据,我们推荐以下策略:
立即学习“Java免费学习笔记(深入)”;
下面将通过一个具体的电影信息展示案例,演示上述策略的实现。
首先,我们定义一个Film类,用于创建电影对象。每个电影对象都包含标题、导演、类型和上映日期等属性。
class Film {
title = '';
director = '';
genre = '';
date = '';
// 构造函数用于初始化对象属性
constructor(title, director, genre, date) {
this.title = title;
this.director = director;
this.genre = genre;
this.date = date;
}
// 辅助方法,用于获取电影的详细信息字符串
getDates() {
return `marca: ${this.title} - director: ${this.director}, genre: ${this.genre}, date: ${this.date}`;
}
}接下来,我们创建几个Film类的实例,并将它们放入一个数组中。
let film1 = new Film('El hobbit', 'peter jackson', 'aventura', '23-02-2002');
let film2 = new Film('El hobbit 2', 'peter jackson', 'aventura', '23-02-2010');
let film3 = new Film('El hobbit 3', 'peter jackson', 'aventura', '23-02-2020');
// 将所有电影对象放入一个数组中
const films = [film1, film2, film3];我们需要一个HTML元素来承载将要显示的数据。
<p id="films"></p>
在JavaScript中获取该元素:
const peliHtml = document.getElementById('films');现在,我们使用map()和join()方法来提取所有电影的标题,并将它们连接成一个字符串,然后更新peliHtml元素的innerHTML。
// 使用map方法提取每个电影对象的title属性,得到一个标题数组
// 例如:['El hobbit', 'El hobbit 2', 'El hobbit 3']
const filmTitles = films.map(film => film.title);
// 使用join方法将标题数组拼接成一个字符串,用逗号和空格分隔
// 例如:'El hobbit, El hobbit 2, El hobbit 3'
const displayString = filmTitles.join(', ');
// 将生成的字符串赋值给HTML元素的innerHTML
peliHtml.innerHTML = displayString;将上述所有代码片段整合,得到完整的HTML和JavaScript代码如下:
HTML (index.html)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>显示电影列表</title>
</head>
<body>
<h1>电影列表</h1>
<p id="films"></p>
<script src="script.js"></script>
</body>
</html>JavaScript (script.js)
class Film {
title = '';
director = '';
genre = '';
date = '';
constructor(title, director, genre, date) {
this.title = title;
this.director = director;
this.genre = genre;
this.date = date;
}
getDates() {
return `marca: ${this.title} - director: ${this.director}, genre: ${this.genre}, date: ${this.date}`;
}
}
// 实例化电影对象
let film1 = new Film('El hobbit', 'peter jackson', 'aventura', '23-02-2002');
let film2 = new Film('El hobbit 2', 'peter jackson', 'aventura', '23-02-2010');
let film3 = new Film('El hobbit 3', 'peter jackson', 'aventura', '23-02-2020');
// 将电影对象放入数组
const films = [film1, film2, film3];
// 获取HTML元素
const peliHtml = document.getElementById('films');
// 使用map提取标题,再用join拼接成字符串,最后更新innerHTML
peliHtml.innerHTML = films.map(film => film.title).join(', ');运行此代码,您将在HTML页面上看到类似 "El hobbit, El hobbit 2, El hobbit 3" 的输出。
在JavaScript中将自定义对象的数据展示到HTML,关键在于理解this的作用域,并善用数组及高阶函数。通过将对象实例组织成数组,并结合Array.prototype.map()进行数据提取和Array.prototype.join()进行格式化,可以高效、清晰地将对象集合的数据渲染到网页上。这种模式是前端开发中处理列表数据展示的常用且推荐的方法。
以上就是JavaScript:在HTML中高效展示对象集合数据的详细内容,更多请关注php中文网其它相关文章!
HTML怎么学习?HTML怎么入门?HTML在哪学?HTML怎么学才快?不用担心,这里为大家提供了HTML速学教程(入门课程),有需要的小伙伴保存下载就能学习啦!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号