ES5/ES6 的继承除了写法以外还有什么区别?
一、主要区别
-
ES5 的继承实质上是先创建子类的实例对象, 然后再将父类的方法添加
到 this 上(Parent.apply(this)) . -
ES6 的继承机制完全不同, 实质上是先创建父类的实例对象 this(所以必
须先调用父类的 super()方法) , 然后再用子类的构造函数修改 this。 -
ES5 的继承时通过原型或构造函数机制来实现。
-
ES6 通过 class 关键字定义类, 里面有构造方法, 类之间通过 extends 关
键字实现继承。 -
子类必须在 constructor 方法中调用 super 方法, 否则新建实例报错。 因
为子类没有自己的 this 对象, 而是继承了父类的 this 对象, 然后对其进行加工。
如果不调用 super 方法, 子类得不到 this 对象。 -
注意 super 关键字指代父类的实例, 即父类的 this 对象。
-
注意: 在子类构造函数中, 调用 super 后, 才可使用 this 关键字, 否则
报错。
function 声明会提升, 但不会初始化赋值。 Foo 进入暂时性死区, 类似于 let、
const 声明变量。
const bar = new Bar();
// it's ok
function Bar() { this.bar = 42;
}
const foo = new Foo();
// ReferenceError: Foo is not defined
class Foo { constructor() { this.foo = 42; }
}
二、class 声明内部会启用严格模式。
// 引用一个未声明的变量 function Bar() {
baz = 42;
// it's ok}const bar = new Bar();
class Foo { constructor() { fol = 42; // ReferenceError: fol is not defined }
}const foo = new Foo();
三、class 的所有方法(包括静态方法和实例方法) 都是不可枚举的。
// 引用一个未声明的变量
function Bar() { this.bar = 42;
}
Bar.answer = function() { return 42;
};
Bar.prototype.print = function() { console.log(this.bar);
};
const barKeys = Object.keys(Bar);
// ['answer']
const barProtoKeys = Object.keys(Bar.prototype);
// ['print']class Foo { constructor() { this.foo = 42; } static answer() { return 42; } print() { console.log(this.foo); }
}
const fooKeys = Object.keys(Foo);
// []
const fooProtoKeys = Object.keys(Foo.prototype);
// []
四、class 的所有方法( 包括静态方法和实例方法) 都没有原型对象 prototype, 所以也没有 constructor, 不能使用 new 来调用。
function Bar() { this.bar = 42;
}
Bar.prototype.print = function() { console.log(this.bar);
};
const bar = new Bar();
const barPrint = new bar.print(); // it's ok
class Foo { constructor() { this.foo = 42; } print() { console.log(this.foo); }
}
const foo = new Foo();
const fooPrint = new foo.print();
// TypeError: foo.print is not a constructor
必须使用 new 调用 class。
function Bar() { this.bar = 42;
}
// it's ok
const bar = Bar(); class Foo { constructor() { this.foo = 42; }
}
const foo = Foo();
// TypeError: Class constructor Foo cannot be invoked without 'new'
五、class 内部无法重写类名。
function Bar() { Bar = 'Baz'; // it's ok this.bar = 42;
}
const bar = new Bar();
// Bar: 'Baz'
// bar: Bar {bar: 42} class Foo { constructor() { this.foo = 42; Foo = 'Fol'; // TypeError: Assignment to constant variable }
}
const foo = new Foo();
Foo = 'Fol';
// it's ok
相关文章:
ES5/ES6 的继承除了写法以外还有什么区别?
一、主要区别 ES5 的继承实质上是先创建子类的实例对象, 然后再将父类的方法添加 到 this 上(Parent.apply(this)) . ES6 的继承机制完全不同, 实质上是先创建父类的实例对象 this(所以必 须先调用父类的 super()方法…...
LeetCode 第401场周赛个人题解
100325. 找出 K 秒后拿着球的孩子 原题链接 100325. 找出 K 秒后拿着球的孩子 思路分析 数据很小,暴力或者数学方法都行 数学方法就是对 n - 1做带余除法,看跑了奇数还是偶数趟,余数如何,确定位置 时间复杂度:O(…...
C#面:请解释web.config⽂件中的重要节点
在C#中,web.config文件是一个XML格式的配置文件,用于配置ASP.NET应用程序的各种设置。web.config文件中包含了许多重要的节点,下面是一些常见的重要节点及其作用: <configuration>节点:web.config文件的根节点&…...
30分钟吃掉 Pytorch 转 onnx
节前,我们星球组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、参加社招和校招面试的同学. 针对算法岗技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备、面试常考点分享等热门话题进行了深入的讨论。 汇总合集&…...
KEIL5如何打开KEIL4的GD工程
GD官方提供的很多KEIL例程为KIEL4的版本,读者使用的时候可能会碰到使用KEIL5打开KEIL4的工程会报错以及无法找到芯片选型的问题,具体表现如下图所示。 我们该怎么办呢? 下面为大家介绍两种方法: 第一种方法是在keil4的工程后缀u…...
大前端技术分类
1 基础 2 语言 3 类库 4 框架 5 跨栈 6 架构 7 领域 7.1 中后台 7.2 跨平台 7.3 可视化 7.4 智能化 7.5 工程化 7.5.1 规范化 7.5.2 流程化 —— 前端工程化工具系列 7.5.3 模板化 7.5.4 自动化 7.5.5 平台化 7.6 其他 7.6.1 音视频 7.6.2 Web3 7.6.3 区块…...
Android AAudio——C API控制音频流(四)
上一篇文章我们介绍了 C API 中音频流的创建流程,以及打开音频流操作,这里我们再来看一下音频流的其他操作流程 一、音频流操作介绍 1、操作流程图 下图是状态变化流程图,虚线框表示瞬时状态,实线框表示稳定状态。 2、操作函数 上图中主要包含下面几个操作函数: aaudio…...
万能嗅探:视频号下载神器
万能嗅探是一款比较好用资源嗅探软件,界面干净,可以抓取浏览器的网页,不过想必各位主要用来抓取视频号,下面是使用方法。 使用方法 打开万能嗅探客户端,然后打开浏览器,产生网络请求即可,看看…...
python数据分析-ZET财务数据分析
一、公司背景 中兴通讯股份有限公司是一家总部位于中国深圳的跨国公司,致力于为全球客户提供通信设备和解决方案。公司成立于1985年,自成立以来一直致力于为客户提供创新的通信技术和服务。中兴通讯的业务涵盖多个领域,包括但不限于高端路由…...
Leetcode学习
回文数 反转一半数字 第一个想法是将数字转换为字符串,并检查字符串是否为回文。 但是,这需要额外的非常量空间来创建问题描述中所不允许的字符串。 第二个想法是将数字本身反转,然后将反转的数字与原始数字比较,如果它们是相同…...
python 列出面板数据所有变量名
在Python中,处理面板数据(Panel Data)通常使用pandas库,特别是当数据以DataFrame或Panel(尽管Panel在较新版本的pandas中已被弃用)的形式存在时。然而,由于Panel的弃用,现代做法通常…...
知乎网站只让知乎用户看文章,普通人看不了
知乎默认不显示全部文章,需要点击展开阅读全文 然而点击后却要登录,这意味着普通人看不了博主写的文章,只有成为知乎用户才有权力查看文章。我想这不是知乎创作者希望的情况,他们写文章肯定是希望所有人都能看到。 这个网站篡改…...
web前端的实习记录:探索、挑战与成长
web前端的实习记录:探索、挑战与成长 踏入web前端实习的旅程,我怀揣着对未知的好奇与对技术的渴望,开始了一段全新的学习与实践。在这个过程中,我经历了四个方面的技术探索,五个方面的挑战应对,六个方面的…...
正则表达式的详解带你认识正则表达式的意义
前言 我们都知道协议通常通过添加固定的字符、报头、特定的数字等来定义数据的结构和格式。将正确的信息提取出来是十分重要的,而正则表达式可以用来描述和匹配这些固定的结构,从而提取出所需的信息。并且正则表达式还可以处理大量复杂的字符串。这篇…...
中国现在最厉害的书法家颜廷利:东方伟大思想家哲学家教育家
中国书法界名人颜廷利教授,一位在21世纪东方哲学、科学界及当代中国教育领域内具有深远影响力的泰斗级人物,不仅以其深厚的国学修为和对易经姓名学的独到见解著称,还因其选择在济南市历城区的龙泉大街以及天桥区的凤凰山庄与泉星小区等地设立…...
OS常用操作
目录 1 文件和目录操作 1. 1 创建目录 1.2 删除目录 1.3 列出目录内容 1.4 删除文件 1.5 打开和关闭文件描述符 1.6 修改文件权限 1.7 获取和设置文件属性 2 路径操作 2.1 获取当前工作目录 2.2 改变工作目录 2.3 路径操作 2.4 添加 Python 的模块搜索路径列表 3 …...
【IC验证】03 UVM
...
Jira的原理及应用详解(六)
本系列文章简介: 在当今快速发展的软件开发和项目管理领域,有效的团队协作和精确的项目进度追踪是确保项目成功的关键。Jira作为一款广受欢迎的项目和问题追踪工具,以其强大的功能、灵活的定制性以及卓越的用户体验,赢得了全球众多…...
Linux进程间通信之System V
目录 认识system V: system V共享内存: 共享内存的基本原理: 共享内存的数据结构: 共享内存的建立与释放: 共享内存的建立: 共享内存的释放: 共享内存的关联: 共享内存的去关联…...
力扣hot100:394. 字符串解码(递归/括号匹配,字符串之间相对顺序)
LeetCode:394. 字符串解码 本题容易想到用递归处理,在写递归时主要是需要明确自己的递归函数的定义。 不过我们也可以利用括号匹配的方式使用栈进行处理。 1、递归 定义递归函数string GetString(string & s,int & i); 表示处理处理整个numbe…...
C语言:结构体(自定义类型)
目录 1. 声明 1.1 结构体的声明 1.2 结构体自引用 2. 结构体内存对齐(热门考点) 2.1 对齐规则 2.3 修改默认对齐数 3.结构体传参 4. 结构体实现位段 4.1 位段 4.2 内存分配 4.3 跨平台问题 4.4 位段的应用:IP数据报 4.5 注意事项…...
专科ENSP毕设实战:基于eNSP的校园网高可用架构设计与配置避坑指南
最近在帮几个专科的学弟学妹看他们的eNSP毕业设计,发现大家普遍卡在几个地方:拓扑画得挺漂亮,但一配置就各种不通;协议背得滚瓜烂熟,但实际命令敲下去就报错;最后答辩演示时,一拔线整个网络就瘫…...
告别本地局限!OpenClaw从本地监听改公网监听,手把手实操教程
💡 前言 在部署OpenClaw的过程中,很多小伙伴都会遇到一个共性问题:服务默认仅监听本地回环地址([127.0.0.1](127.0.0.1)),只能在服务器本机访问,完全没法满足远程管理、跨设备调用、公网服务暴露的实际业务需求。想要让OpenClaw真正发挥作用,核心就是把监听模式从本地…...
低成本DIY智能小车核心模块:用STM32和TB6612实现带编码器的定速巡航功能
低成本DIY智能小车核心模块:用STM32和TB6612实现带编码器的定速巡航功能 周末在工作室调试新做的智能小车时,突然意识到一个有趣的现象:当我们给电机设定固定转速后,实际速度总会因为电池电压波动、负载变化等因素产生偏差。这让…...
辅助用电系统安装:工业项目电力配套的关键环节问题全解析
在工业厂房、园区配套、商业综合体、仓储物流中心以及各类生产型项目中,很多人一提到电气工程,第一反应往往是高压配电、变压器、动力柜或者主供电系统。但真正决定项目是否“好用、稳用、久用”的,往往不是主系统本身,而是隐藏在…...
虚拟控制器驱动技术全解析:从原理到实战优化
虚拟控制器驱动技术全解析:从原理到实战优化 【免费下载链接】ViGEmBus Windows kernel-mode driver emulating well-known USB game controllers. 项目地址: https://gitcode.com/gh_mirrors/vi/ViGEmBus 虚拟控制器驱动技术是连接物理输入设备与Windows游戏…...
Vibe Coding 流程数据化,规则自我进化,让 AI 从错误中自动学习
Vibe Coding 流程数据化,规则自我进化,让 AI 从错误中自动学习 开源工具 AIDA:给 AI 辅助开发加一个数据采集层,让 AI 从错误中自动学习(Glama 3A 认证) 一、痛点:AI 写代码很快,但…...
Qwen3.5-4B-Claude-Opus-GGUF多场景落地:从CTF密码学题解到渗透测试思路
Qwen3.5-4B-Claude-Opus-GGUF多场景落地:从CTF密码学题解到渗透测试思路 1. 模型核心能力解析 1.1 技术架构特点 Qwen3.5-4B-Claude-4.6-Opus-Reasoning-Distilled-GGUF是基于Qwen3.5-4B的推理蒸馏模型,通过专门训练强化了结构化分析和分步骤推理能力…...
Pixel Fashion Atelier应用场景:数字藏品创作者批量生成稀缺性像素时装NFT
Pixel Fashion Atelier应用场景:数字藏品创作者批量生成稀缺性像素时装NFT 1. 像素时装NFT创作新范式 在数字藏品领域,稀缺性和独特性是核心价值。Pixel Fashion Atelier为创作者提供了一个革命性的解决方案,将AI生成技术与像素艺术美学相结…...
从Python调包侠到量化研究员:我的3年转型踩坑实录与学习路线图
从Python调包侠到量化研究员:我的3年转型踩坑实录与学习路线图 三年前,我还是一名只会用Python调包的数据工程师,每天的工作就是清洗数据、跑模型、生成报表。直到某次聚会上,一位在私募基金做量化的朋友随口提了句"我们组去…...
