红宝书第十一讲:超易懂版「ES6类与继承」零基础教程:用现实例子+图解实现

news2025/3/26 18:41:32

红宝书第十一讲:超易懂版「ES6类与继承」零基础教程:用现实例子+图解实现

资料取自《JavaScript高级程序设计(第5版)》。
查看总目录:红宝书学习大纲


一、ES6类的核心语法:把事物抽象成“模板”

想象你要设计一款「动物养成游戏」,需要创建多种动物对象。ES6的class就是一个代码模板

// 基础类(Animal是模板,有名称和吃东西方法)
class Animal {
  constructor(name) {   // 构造函数,初始化属性
    this.name = name;
  }
  
  // 实例方法(所有动物都会吃)
  eat(food) {
    console.log(`${this.name}${food}`);
  }

  // 静态方法(属于类本身,动物总数统计)
  static count() {  
    console.log(`动物园共有${Animal.total}只动物`);
  }
}
Animal.total = 0; // 静态属性(新语法需使用static声明)

// 创建实例
const dog = new Animal("旺财"); 
dog.eat("骨头"); // "旺财吃骨头" ✅
Animal.total++;  // 静态属性通过类名访问
Animal.count();  // "动物园共有1只动物"

🎯 重点说明

  • constructor():相当于设定初始值的函数(new触发)
  • 实例方法:定义行为(如eat(),需实例调用)
  • static静态方法:属于类本身(如count(),类直接调用)

二、继承:子类复用父类能力的秘诀

假设需要新增「猫类」,会继承动物的基础能力,并新增「爬树」方法:

class Cat extends Animal {  // ✨关键:extends继承
  constructor(name, color) {
    super(name);  // 🔑调用父类构造函数
    this.color = color;  
  }

  // 新增方法(只有猫会爬树)
  climbTree() {
    console.log(`${this.name}正在爬树`);
  }

  // 覆盖父类方法(修改猫的吃法)
  eat(food) {  
    super.eat(food);  // 复用父类的eat方法
    console.log("优雅地舔爪子!");
  }
}

// 测试继承
const cat = new Cat("小白", "白色");
cat.eat("鱼"); 
// "小白吃鱼" 
// "优雅地舔爪子!" ✅
cat.climbTree();  // "小白正在爬树" ✅
console.log(cat instanceof Animal); // true ✅

语法要点

  1. extends关键字:让子类继承父类
  2. super():调用父类构造函数(必须放在子类构造第一行)
  3. 方法覆盖:子类可重写父类方法(比如eat()

三、继承的原理:原型链的“自动连接”

ES6类本质是基于原型的语法糖(背后仍用原型链实现继承)1。通过extends,子类的原型会指向父类的实例:

// 手动验证原型链
console.log(Cat.prototype.__proto__ === Animal.prototype); // true ✅
  • 子类实例先找自身方法 → 找不到则沿原型链向上查找(父类→祖父类…)

四、特殊继承技巧:继承传统构造函数

ES6类还可以继承旧版JS的函数构造函数(保持兼容性)2

// ES5风格的构造函数(旧代码)
function Person(name) {
  this.name = name;
}
Person.prototype.sayHi = function() {
  console.log(`你好,我是${this.name}`);
};

// ES6类继承构造函数
class Engineer extends Person {
  constructor(name, skill) {
    super(name);
    this.skill = skill;
  }
}

const engineer = new Engineer("张三", "JavaScript");
engineer.sayHi(); // "你好,我是张三" ✅

说明:旧代码无需修改,可直接用extends继承!


五、总结表格:ES6类语法速查

功能语法示例说明
定义类class 类名 { ... }大写开头,驼峰命名
构造函数constructor() { ... }只能有一个构造函数
定义实例方法方法名() { ... }实例调用
静态方法/属性static 方法名() { ... }类名调用,如Animal.count()
继承父类class 子类 extends 父类 { ... }子类继承父类能力
调用父类构造函数super(参数)必须放在子类构造第一行
调用父类方法super.父类方法名()eat()中调用父类方法

目录:总目录
上篇文章:红宝书第十讲:「构造函数与原型链」入门及深入解读:用举例子+图画理解“套娃继承”
下篇文章:红宝书第十二讲:详解JavaScript中的工厂模式与原型模式等各种设计模式

脚注


  1. ES6类本质是对原型继承的语法封装,保留原型链特性但语法更清晰。来源:《JavaScript高级程序设计(第5版)》指出ES6类是对传统原型方式的抽象优化。 ↩︎

  2. extends关键字不仅支持类间的继承,还可兼容旧版函数构造函数实现继承。来源:《JavaScript高级程序设计(第5版)》中关于Engineer类继承Person构造函数的示例。 ↩︎

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

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

相关文章

Python为Word文档添加书签并打包成exe

背景简述 由于一些工作场景,需要从多个Word文档中找到出现的关键词,并阅读关键词的上下文内容。文件可能几十个,手动操作太要命了。所以python尝试处理。 目录 背景简述思路第一步、功能实现结果验证 第二步、打包成exe2-1、基础准备2-2、打…

ROS导航工具包Navigation

一,安装 Navigation工具包包含在 navigation 元功能包中。你可以通过以下命令安装: sudo apt-get install ros-noetic-navigation 如果你使用的是其他ROS版本(如Melodic),将 noetic 替换为对应的版本名称&#xff08…

资金管理策略思路

详细描述了完整交易策略的实现细节,主要包括输入参数、变量定义、趋势判断、入场与出场条件、止损与止盈设置等多个方面。 输入参数(Input): EntryFrL (.6):多头入场的前一日波动范围的倍数。 EntryFrS (.3)&#xff1…

工业软件的破局与重构:从技术依赖到自主创新的未来路径

工业软件作为现代工业的“神经与大脑”,不仅是制造业数字化转型的核心工具,更是国家工业竞争力的战略制高点。近年来,中国工业软件市场在政策驱动与技术迭代中迅猛发展,但核心技术受制于人的困境仍待突破。如何实现从“跟跑”到“…

常见中间件漏洞攻略-Tomcat篇

一、 CVE-2017-12615-Tomcat put方法任意文件写入漏洞 第一步:开启靶场 第二步:在首页抓取数据包,并发送到重放器 第三步:先上传尝试一个1.txt进行测试 第四步:上传后门程序 第五步:使用哥斯拉连接 二、后…

【Dive Into Stable Diffusion v3.5】2:Stable Diffusion v3.5原理介绍

【Dive Into Stable Diffusion v3.5】系列博文: 第1篇:开源项目正式发布——深入探索SDv3.5模型全参/LoRA/RLHF训练第2篇:Stable Diffusion v3.5原理介绍 目录 1 前言1.1 扩散模型的原理1.2 损失函数1.3 加噪流程1.4 推理流程1.5 negative pr…

英伟达黄仁勋2025GTC演讲深度解析:液冷GPU、AI工厂、机器人AI…...

目录 一、技术产品与架构升级:从芯片到算力工厂1. 新一代GPU与计算架构2. AI工厂与算力操作系统 二、AI技术演进:从生成式到物理AI1. AI发展的三大阶段2. 推理算力需求爆炸式增长 三、生态合作与行业落地1. CUDA生态与开源工具2. 跨行业合作案例 四、未来…

嵌入式项目:利用心知天气获取天气数据实验方案

【实验目的】 1、利用心知天气服务器获取指定位置天气数据 2、将天气数据解析并可视化显示到OLED屏幕 【实验原理】 【实验步骤】 官网注册

Ubuntu下用QEMU模拟运行OpenBMC

1、前言 在调试过程中,安装了很多依赖库,具体没有记录。关于kvm,也没理清具体有什么作用。本文仅记录,用QEMU成功的将OpenBMC跑起来的过程,做备忘,也供大家参考。 2、环境信息 VMware Workstation 15 Pro…

专题|Python贝叶斯网络BN动态推理因果建模:MLE/Bayes、有向无环图DAG可视化分析呼吸疾病、汽车效能数据2实例合集

原文链接:https://tecdat.cn/?p41199 作为数据科学家,我们始终在探索能够有效处理复杂系统不确定性的建模工具。本专题合集系统性地解构了贝叶斯网络(BN)这一概率图模型在当代数据分析中的创新应用,通过开源工具bnlea…

Java单例模式中的饿汉模式和懒汉模式

Java单例模式中的饿汉模式和懒汉模式 一、单例模式的显著特点单一实例全局访问 二、饿汉模式:急切的实例创建者三、懒汉模式:延迟的实例构建者1. 不考虑线程安全的初始版本2. 引入同步机制解决线程安全问题3. 优化性能:避免重复进入同步块4. …

理解操作系统(一)冯诺依曼结构和什么是操作系统

认识冯诺依曼系统 操作系统概念与定位 深⼊理解进程概念,了解PCB 学习进程状态,学会创建进程,掌握僵⼫进程和孤⼉进程,及其形成原因和危害 1. 冯诺依曼体系结构 我们常⻅的计算机,如笔记本。我们不常⻅的计算机&am…

Git的认识安装及创建配置本地仓库

目录 Git的作用安装Git创建Git仓库配置本地仓库git config user.name/email(添加配置)以及git config --unset.name/email(删除配置)git config --global user.name/email以及git config --global --unset user.name/email(name和email适用于当前机器的所有Git仓库中) 感谢各位…

【el-upload】el-upload组件 - list-type=“picture“ 时,文件预览展示优化

目录 问题图el-upload预览组件 PicturePreview效果展示 问题图 el-upload <el-uploadref"upload"multipledragaction"#":auto-upload"false":file-list"fileList"name"files":accept".png,.jpg,.jpeg,.JGP,.JPEG,.…

Uthana,AI 3D角色动画生成平台

Uthana是什么 Uthana 是专注于3D角色动画生成的AI平台。平台基于简单的文字描述、参考视频或动作库搜索&#xff0c;快速为用户生成逼真的动画&#xff0c;支持适配任何骨骼结构的模型。Uthana 提供风格迁移、API集成和定制模型训练等功能&#xff0c;满足不同用户需求。平台提…

面试常问系列(二)-神经网络参数初始化之自注意力机制

目录 &#xff08;一&#xff09;、transformer中的自注意力机制为什么要除以根号d&#xff1f; 1. 点积的方差问题 2. 缩放的作用 3. 类比初始化方法 4. 实验验证 5.总结 &#xff08;一&#xff09;、transformer中的自注意力机制为什么要除以根号d&#xff1f; 在Tra…

Linux冯诺依曼体系与计算机系统架构认知(8)

文章目录 前言一、冯诺依曼体系冯•诺依曼体系结构推导内存提高冯•诺依曼体系结构效率的方法你用QQ和朋友聊天时数据的流动过程与冯•诺依曼体系结构相关的一些知识 二、计算机层次结构分析操作系统(Operator System)驱动层的作用与意义系统调用接口(system call)用户操作接口…

LLM之RAG理论(十四)| RAG 最佳实践

RAG 的过程很复杂&#xff0c;包含许多组成部分。我们如何确定现有的 RAG 方法及其最佳组合&#xff0c;以确定最佳 RAG 实践&#xff1f; 论文 《Searching for Best Practices in Retrieval-Augmented Generation》给出了回答。 本文将从以下三方面进行介绍&#xff1a; 首先…

[RoarCTF 2019]Easy Calc-3.23BUUCTF练习day5(2)

[RoarCTF 2019]Easy Calc-3.23BUUCTF练习day5(2) 解题过程 查看源码 发现calc.php页面&#xff0c;访问一下 分析代码 首先获取$_GET[num]的值并赋给变量$str。然后定义了一个黑名单数组$blacklist&#xff0c;包含了一系列被禁止的字符或转义字符&#xff0c;如空格、制表…

hadoop集群配置-ssh无密登录

1.ssh-keygen -t rsa 2.ssh-copy-id hadoop1 3.ssh roothadoop1 退出 exit