0

0

javascript如何实现继承_ES6的class语法糖背后是什么原理?

狼影

狼影

发布时间:2026-01-10 21:13:11

|

841人浏览过

|

来源于php中文网

原创

es6 class是函数和原型链的语法糖,继承仍基于[[prototype]]链:①b.prototype.[[prototype]]=a.prototype;②b.[[prototype]]=a;③子类constructor必须先调super()初始化this。

javascript如何实现继承_es6的class语法糖背后是什么原理?

ES6 class 不是新继承机制,只是函数和原型链的语法糖

ES6 的 class 本身不改变 JavaScript 的继承本质——它依然完全基于原型(prototype)和 [[Prototype]] 链。所谓“类继承”,底层仍是通过 Object.setPrototypeOf() 和函数的 prototype 属性操作实现的。

你写 class B extends A,引擎实际做了三件事:
① 创建构造函数 B
② 设置 B.prototype.[[Prototype]] = A.prototype(保证实例能访问父类方法);
③ 设置 B.[[Prototype]] = A(让静态方法可继承)。

extends 要求子类必须调用 super(),否则报错 ReferenceError: Must call super constructor

这是因为子类构造函数中,this 在调用 super() 前未被初始化(V8 引擎强制限制)。不调用 super() 就访问 this,会直接抛出该错误。

  • super() 必须在子类 constructor 中**首行之后、任何 this 访问之前**调用
  • 若子类没写 constructor,引擎自动补一个隐式构造函数,并插入 super(...args)
  • 若要修改传给父类的参数,必须显式写 constructor 并手动调用 super(…)
class Animal {
  constructor(name) {
    this.name = name;
  }
}
class Dog extends Animal {
  constructor(name, breed) {
    super(name); // ✅ 必须先调
    this.breed = breed; // ✅ this 此时已就绪
  }
}

static 方法和属性的继承靠的是函数对象自身的 [[Prototype]]

class B extends A 后,B.__proto__ === A 成立(注意:不是 B.prototype.__proto__)。这意味着 A 上定义的 static 方法,能被 B 直接继承调用。

立即学习Java免费学习笔记(深入)”;

创伴
创伴

专为内容创作者打造的AI创作工具,覆盖选题灵感、脚本创作、素材生成到智能发布

下载

常见误区:以为 static 是挂在 prototype 上——其实它是挂在构造函数自身(即 B 函数对象)上的,而函数对象的隐式原型链指向父类构造函数。

  • A.staticMethod() 可被 B.staticMethod() 调用,因为 B.[[Prototype]] === A
  • B.prototype.staticMethodundefined,因为 static 不进 prototype
  • 若重写 B.staticMethod = …,则切断该继承(覆盖),不影响 A

想真正理解继承,绕不开 Object.setPrototypeOf()__proto__ 的手动模拟

用 ES5 手动实现 class B extends A,就能看清所有关键连接点:

function A(name) { this.name = name; }
A.prototype.say = function() { return 'hi'; };

function B(name, age) {
  A.call(this, name); // ✅ 模拟 super()
  this.age = age;
}
// ✅ 模拟 B.prototype.[[Prototype]] = A.prototype
Object.setPrototypeOf(B.prototype, A.prototype);
// ✅ 模拟 B.[[Prototype]] = A(支持 static 继承)
Object.setPrototypeOf(B, A);

上面两行 Object.setPrototypeOf 缺一不可:漏掉第一行,new B().say()undefined;漏掉第二行,B.staticProp 无法从 A 继承。

现代代码里不建议手动改 __proto__ 或反复调用 setPrototypeOf,但调试或写兼容层时,这些才是真实生效的链路节点。

相关文章

java速学教程(入门到精通)
java速学教程(入门到精通)

java怎么学习?java怎么入门?java在哪学?java怎么学才快?不用担心,这里为大家提供了java速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
es6新特性
es6新特性

es6新特性有:1、块级作用域变量;2、箭头函数;3、模板字符串;4、解构赋值;5、默认参数;6、 扩展运算符;7、 类和继承;8、Promise。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

106

2023.07.17

es6新特性有哪些
es6新特性有哪些

es6的新特性有:1、块级作用域;2、箭头函数;3、解构赋值;4、默认参数;5、扩展运算符;6、模板字符串;7、类和模块;8、迭代器和生成器;9、Promise对象;10、模块化导入和导出等等。本专题为大家提供es6新特性的相关的文章、下载、课程内容,供大家免费下载体验。

197

2023.08.04

JavaScript ES6新特性
JavaScript ES6新特性

ES6是JavaScript的根本性升级,引入let/const实现块级作用域、箭头函数解决this绑定问题、解构赋值与模板字符串简化数据处理、对象简写与模块化提升代码可读性与组织性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

231

2025.12.24

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

788

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

26

2025.12.06

undefined是什么
undefined是什么

undefined是代表一个值或变量不存在或未定义的状态。它可以作为默认值来判断一个变量是否已经被赋值,也可以用于设置默认参数值。尽管在不同的编程语言中,undefined可能具有不同的含义和用法,但理解undefined的概念可以帮助我们更好地理解和编写程序。本专题为大家提供undefined相关的各种文章、以及下载和课程。

6158

2023.07.31

网页undefined是什么意思
网页undefined是什么意思

网页undefined是指页面出现了未知错误的意思,提示undefined一般是在开发网站的时候定义不正确或是转换不正确,或是找不到定义才会提示undefined未定义这个错误。想了解更多的相关内容,可以阅读本专题下面的文章。

3307

2024.08.14

网页undefined啥意思
网页undefined啥意思

本专题整合了undefined相关内容,阅读下面的文章了解更多详细内容。后续继续更新。

1571

2025.12.25

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

1

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
React 教程
React 教程

共58课时 | 5.8万人学习

TypeScript 教程
TypeScript 教程

共19课时 | 3.3万人学习

Bootstrap 5教程
Bootstrap 5教程

共46课时 | 3.5万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号