六十天前端强化训练之第八天到第十四天——综合案例:用户管理系统

=====欢迎来到编程星辰海的博客讲解======

看完可以给一个免费的三连吗,谢谢大佬!

目录

一、知识体系详解

1. 变量与作用域

2. 箭头函数特性

3. 数组高阶函数

4. DOM操作原理

5. 事件传播机制

6. 闭包核心原理

7. 原型继承体系

8. Promise工作流程

二、综合案例:用户管理系统

1. HTML结构

2. JavaScript代码(app.js)

三、实现效果

四、学习要点总结

五、扩展学习推荐

官方文档

优质文章


一、知识体系详解

1. 变量与作用域

JAVASCRIPT

// var 存在变量提升和函数作用域
console.log(a); // undefined
var a = 10;// let/const 块级作用域
{let b = 20;const MAX = 100;
}
console.log(b); // ReferenceError
2. 箭头函数特性

JAVASCRIPT

const obj = {name: 'obj',regularFunc: function() {console.log(this.name); // obj},arrowFunc: () => {console.log(this.name); // undefined(继承外层this)}
}
3. 数组高阶函数

JAVASCRIPT

const numbers = [1,2,3,4];// map转换
const doubled = numbers.map(n => n * 2); // filter筛选
const evens = numbers.filter(n => n%2 === 0);// reduce聚合
const sum = numbers.reduce((acc, cur) => acc + cur, 0);
4. DOM操作原理

JAVASCRIPT

// 创建元素
const div = document.createElement('div');
div.classList.add('box');// 批量插入
const fragment = document.createDocumentFragment();
items.forEach(item => {const li = document.createElement('li');fragment.appendChild(li);
});
ul.appendChild(fragment);
5. 事件传播机制

6. 闭包核心原理

JAVASCRIPT

function createCounter() {let count = 0; // 闭包保护的变量return {increment: () => ++count,getCount: () => count}
}
7. 原型继承体系

JAVASCRIPT

class Animal {constructor(name) {this.name = name;}speak() {console.log(`${this.name} makes a noise`);}
}class Dog extends Animal {constructor(name) {super(name);}speak() {super.speak();console.log(`${this.name} barks`);}
}
8. Promise工作流程


二、综合案例:用户管理系统(这是完整且可运行代码,有详细注释)

1. HTML结构

HTML

<!DOCTYPE html>
<html>
<head><title>用户管理系统</title><style>/* CSS样式 */.container { max-width: 800px; margin: 20px auto; }.search-box { margin-bottom: 20px; }table { width: 100%; border-collapse: collapse; }th, td { padding: 12px; border: 1px solid #ddd; text-align: left; }th { background-color: #f5f5f5; cursor: pointer; }.pagination { margin-top: 20px; }</style>
</head>
<body><div class="container"><div class="search-box"><input type="text" id="searchInput" placeholder="输入姓名或邮箱搜索..."></div><div id="userTable"></div><div class="pagination" id="pagination"></div></div><script src="app.js"></script>
</body>
</html>
2. JavaScript代码(app.js)

JAVASCRIPT

class UserManager {constructor() {this.users = [];       // 原始数据this.filteredUsers = []; // 过滤后数据this.currentPage = 1; // 当前页码this.pageSize = 5;    // 每页条数this.init();}/** 初始化方法(使用异步立即执行函数) */async init() {await this.fetchUsers();this.renderTable();this.setupEventListeners();}/** 使用fetch获取数据(Promise应用) */async fetchUsers() {try {const response = await fetch('https://dummyjson.com/users?limit=20');const data = await response.json();this.users = data.users.map(user => ({id: user.id,name: `${user.firstName} ${user.lastName}`,age: user.age,email: user.email,department: user.company.department}));this.filteredUsers = [...this.users];} catch (error) {console.error('数据加载失败:', error);}}/** 渲染表格(DOM操作) */renderTable() {const start = (this.currentPage - 1) * this.pageSize;const end = start + this.pageSize;const currentUsers = this.filteredUsers.slice(start, end);// 创建表格结构const table = document.createElement('table');table.innerHTML = `<thead><tr><th data-field="id">ID ▼</th><th data-field="name">姓名 ▼</th><th data-field="age">年龄 ▼</th><th data-field="email">邮箱 ▼</th><th data-field="department">部门 ▼</th></tr></thead><tbody>${currentUsers.map(user => `<tr><td>${user.id}</td><td>${user.name}</td><td>${user.age}</td><td>${user.email}</td><td>${user.department}</td></tr>`).join('')}</tbody>`;// 清空并更新表格const container = document.getElementById('userTable');container.innerHTML = '';container.appendChild(table);// 渲染分页this.renderPagination();}/** 分页组件 */renderPagination() {const totalPages = Math.ceil(this.filteredUsers.length / this.pageSize);const pagination = document.getElementById('pagination');// 生成页码按钮pagination.innerHTML = Array.from({length: totalPages}, (_, i) => `<button class="${i + 1 === this.currentPage ? 'active' : ''}" onclick="userManager.goToPage(${i + 1})">${i + 1}</button>`).join(' ');}/** 事件绑定(使用事件委托) */setupEventListeners() {// 搜索功能document.getElementById('searchInput').addEventListener('input', (e) => {const keyword = e.target.value.toLowerCase();this.filteredUsers = this.users.filter(user =>user.name.toLowerCase().includes(keyword) ||user.email.toLowerCase().includes(keyword));this.currentPage = 1;this.renderTable();});// 表头排序(闭包保存排序状态)document.querySelector('#userTable').addEventListener('click', (e) => {if (e.target.tagName === 'TH') {const field = e.target.dataset.field;this.sortUsers(field);}});}/** 排序逻辑 */sortUsers(field) {let isAsc = true; // 闭包保存排序方向return () => {this.filteredUsers.sort((a, b) => {if (typeof a[field] === 'string') {return isAsc ? a[field].localeCompare(b[field]): b[field].localeCompare(a[field]);}return isAsc ? a[field] - b[field] : b[field] - a[field];});isAsc = !isAsc;this.renderTable();}}/** 分页跳转 */goToPage(page) {this.currentPage = page;this.renderTable();}
}// 初始化系统
const userManager = new UserManager();


三、实现效果


四、学习要点总结

  1. 变量作用域控制

    • 使用const/let进行块级作用域管理
    • 使用IIFE管理私有变量
  2. 异步流程控制

    • async/await处理异步操作
    • Promise链式调用错误处理
  3. DOM操作优化

    • 使用文档片段批量插入
    • 事件委托减少监听器数量
  4. 函数式编程

    • map/filter/reduce组合使用
    • 纯函数避免副作用
  5. 模块化设计

    • 使用Class组织代码
    • 职责单一原则

五、扩展学习推荐

官方文档
  1. MDN JavaScript Guide
  2. ECMAScript 6 入门
  3. DOM Living Standard
优质文章
  1. JavaScript 闭包的终极指南
  2. Promise 使用模式最佳实践
  3. 现代 JavaScript 教程

建议通过Chrome开发者工具的Sources面板调试代码,观察闭包变量和事件传播过程,配合console.log验证程序执行流程。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/71797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技术周总结 03.03 - 03.09 周日(Java监控 SpringAI)

文章目录 一、03.05 周三二、03.08 周六openAI 的Spring开发 一、03.05 周三 jvisualvm java自带的监控和故障排除工具 命令行执行后&#xff0c;会出现 JConsole 二、03.08 周六 openAI 的Spring开发 引入 spring-ai-openai-spirng-boot-starter 依赖 Spring AI http…

DeepSeek:中国AGI破局者的技术革命与生态重构

在AI领域被"算力霸权"与"技术垄断"笼罩的今天&#xff0c;一家来自杭州的初创公司正以颠覆性创新撕开行业铁幕。DeepSeek&#xff08;深度求索&#xff09;不仅重新定义了AGI技术研发范式&#xff0c;更通过开源生态构建引发全球AI产业格局的深度重构。 一…

manus本地部署使用体验

manus部署 https://github.com/mannaandpoem/OpenManus git clone https://github.com/mannaandpoem/OpenManus.git 或者手工下载zip包解压&#xff0c;包很小&#xff0c;只有几百K。 cd OpenManus-main #创建python环境&#xff0c;有python3的可以用python3 python -m ven…

【统计至简】【入门测试1】给定数据矩阵X,如何求其质心、中心化数据、标准化数据、格拉姆矩阵、协方差矩阵、相关系数矩阵

给定数据矩阵X&#xff0c;如何求其质心、中心化数据、标准化数据、格拉姆矩阵、协方差矩阵、相关系数矩阵。   设数据矩阵 X X X是一个 n p n\times p np的矩阵&#xff0c;其中 n n n是样本数量&#xff0c; p p p是变量数量&#xff0c; X ( x i j ) X (x_{ij}) X(xij​…

CI/CD—Jenkins、Maven安装

Jenkins简介 Jenkins 是一款广泛使用的开源持续集成和持续交付&#xff08;CI/CD&#xff09;工具&#xff0c;以下是对它的详细介绍&#xff1a; 基本信息 起源与发展&#xff1a;Jenkins 最早起源于 Hudson 项目&#xff0c;后来从 Hudson 项目中分离出来独立发展。自 2011 …

抽奖系统测试报告

项目链接: 管理员登录页面 项目功能: 管理员登录: 登录方式分为两种: 手机号密码登录: 正确输入密码和手机号登录 短信验证码登录: 输入手机号,等待验证码,输入验证码登录 管理员注册: 登录页面点击注册按钮即可注册管理员身份 人员管理模块: 人员管理模块分为注册…

【高级篇】大疆Pocket 3加ENC编码器实现无线RTMP转HDMI进导播台

【高级篇】大疆Pocket 3加ENC编码器实现无线RTMP转HDMI进导播台 文章目录 准备工作连接设备RTMP概念ENCSHV2推流地址设置大疆Pocket 3直播设置总结 老铁们好&#xff01; 很久没写软文了&#xff0c;今天给大家带了一个干货&#xff0c;如上图&#xff0c;大疆Pocket 3加ENC编…

【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Servlet 与 JSP 的协作:MVC 模式的雏形

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、Servl…

【不是广告】华为昇腾的一小步,Pytorch的一大步

华为昇腾的一小步&#xff0c;Pytorch的一大步 关键词 首个、中国首个、全球第十、最高级别&#xff01;看看这些字眼&#xff0c;就知道事情不简单&#xff01; 书接上文《Pytorch的一小步&#xff0c;昇腾芯片的一大步》 在2023年10月4日PyTorch 2.1版本的发布博客上&…

python从入门到精通(二十六):python文件操作之Word全攻略(基于python-docx)

python文件操作之word技巧大全 word技巧基础到高级操作大全A.准备工作1. 安装python-docx库2. 导入库 B.基础操作1. 创建Word文档1.1 创建文档对象1.2 添加word标题1.3 添加word段落1.4 设置段落样式1.5 创建有序列表1.6 创建无序列表1.7添加word分页1.8 添加word图片1.9 添加w…

Debian二次开发一体化工作站:提升科研效率的智能工具

在科研领域&#xff0c;数据处理是实验成功的关键环节之一。随着实验数据的复杂性和规模不断增加&#xff0c;传统的数据处理方法已经难以满足科研人员的需求。这时&#xff0c;一体化工作站应运而生&#xff0c;成为科研实验数据处理的 “智能大脑”。 一体化工作站&#xff…

linux学习(五)(服务器审查,正常运行时间负载,身份验证日志,正在运行的服务,评估可用内存)

服务器审查 在 Linux 中审查服务器的过程包括评估服务器的性能、安全性和配置&#xff0c;以确定需要改进的领域或任何潜在问题。审查的范围可以包括检查安全增强功能、检查日志文件、审查用户帐户、分析服务器的网络配置以及检查其软件版本。 Linux 以其稳定性和安全性而闻名…

Redis- 大key

大key 什么是大key问题大key的危害大key的识别方法大key问题的解决方案数据结构优化与拆分压缩与序列化优化预防与监控机制 什么是大key问题 大Key问题是指在Redis等内存数据库中&#xff0c;某个Key对应的value数据结构过大&#xff0c;通常是指单个Key的大小超过10KB甚至达到…

C语言_数据结构总结6:链式栈

纯c语言代码&#xff0c;不涉及C 顺序栈的实现&#xff0c;欢迎查看这篇文章&#xff1a;C语言_数据结构总结5&#xff1a;顺序栈-CSDN博客 0. 结构单元 #include<stdio.h> #include<stdlib.h> typedef int ElemType; typedef struct Linknode { ElemType…

新品速递 | 多通道可编程衰减器+矩阵系统,如何破解复杂通信测试难题?

在无线通信技术快速迭代的今天&#xff0c;多通道可编程数字射频衰减器和衰减矩阵已成为测试领域不可或缺的核心工具。它们凭借高精度、灵活配置和强大的多通道协同能力&#xff0c;为5G、物联网、卫星通信等前沿技术的研发与验证提供了关键支持。从基站性能测试到终端设备校准…

AI自动化应用的影响

生产力的迭代也终将伴随着一代人的落幕。 2025年是AI应用爆发的开局之年&#xff0c;预计3-5年现有生产关系将出现颠覆性改革。 AI自动化对经济和就业的影响是一个复杂且多维的问题&#xff0c;其长期影响取决于技术进步、政策调控、社会适应能力等多重因素的综合作用。以下从技…

润开鸿重磅首发基于“RISC-V+OpenHarmony+星闪”的“鸿锐”AI开发平台

润开鸿重磅首发基于“RISC-VOpenHarmony星闪”的“鸿锐”AI开发平台 2月28日&#xff0c;2025中国RISC-V生态大会在北京中关村国际创新中心隆重召开。作为领先的鸿蒙生态专业技术公司和终端操作系统发行版提供商&#xff0c;以及不断推进基于RISC-V与OpenHarmony全栈开源生态构…

Java 深度复制对象:从基础到实战

目录 一、深度复制的概念二、实现深度复制的方法1. 使用序列化2. 手动实现深度复制 三、总结 在 Java 编程中&#xff0c;对象的复制是一个常见的需求。然而&#xff0c;简单的复制操作&#xff08;如直接赋值&#xff09;只会复制对象的引用&#xff0c;而不是创建一个新的对象…

C++ Primer 交换操作

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

FFmpeg-chapter7和chapter8-使用 FFmpeg 解码视频(原理篇和实站篇)

解码流程如下图 流程&#xff1a;首先&#xff0c;通过 avcodec_alloc_context3(nullptr) 分配一个 AVCodecContext 结构体&#xff0c;然后使用 avcodec_parameters_to_context 将参数复制到上下文中&#xff0c;接着通过 avcodec_find_decoder 查找指定的解码器&#xff0c;并…