当前位置: 首页 > ds >正文

【JS进阶】ES6 实现继承的方式

ES6 实现继承的方式

基本语法

class Parent {constructor(name) {this.name = name;this.colors = ['red', 'blue'];}sayName() {console.log(this.name);}
}class Child extends Parent {constructor(name, age) {super(name); // 必须调用super(),且在使用this之前this.age = age;}sayAge() {console.log(this.age);}
}const child1 = new Child('Tom', 10);
child1.sayName(); // "Tom"
child1.sayAge(); // 10
child1.colors.push('green');
console.log(child1.colors); // ['red', 'blue', 'green']const child2 = new Child('Jerry', 8);
console.log(child2.colors); // ['red', 'blue'] (不共享引用属性)

关键点说明

  1. extends 关键字:用于声明类继承关系
  2. super 关键字
    • 在构造函数中:super() 调用父类构造函数,必须在访问 this 之前调用
    • 在方法中:super.method() 可以调用父类方法
  3. 静态方法继承:子类会继承父类的静态方法
  4. 原型方法继承:子类实例可以调用父类原型方法

与 ES5 继承的对比

特性ES5 继承ES6 class 继承
语法复杂,需要手动处理原型链简洁,使用 classextends
构造函数调用需要手动调用父类构造函数通过 super() 自动处理
静态方法继承需要额外处理自动继承
原型方法需要手动设置原型链自动继承
内置类继承难以实现可以继承内置类如 Array, Error 等

注意事项

  1. 必须调用 super():在子类构造函数中,必须先调用 super() 才能使用 this
  2. super 的不同用法
    class Child extends Parent {constructor() {super(); // 调用父类构造函数}method() {super.parentMethod(); // 调用父类方法}
    }
    
  3. 可以继承内置类型
    class MyArray extends Array {// 可以扩展内置Array的功能
    }
    
  4. new.target:可以检测是通过哪个类被实例化的

底层实现

ES6 的 class 继承本质上是 ES5 寄生组合式继承的语法糖,Babel 转译后的代码类似于:

function _inherits(subClass, superClass) {subClass.prototype = Object.create(superClass.prototype);subClass.prototype.constructor = subClass;subClass.__proto__ = superClass;
}// 然后实现类似的继承逻辑
http://www.xdnf.cn/news/12316.html

相关文章:

  • CppCon 2015 学习:C++ Coroutines
  • LeetCode 1356.根据数字二进制下1的数目排序
  • Python异步爬虫与代理完美结合
  • Prompt Tuning:生成的模型文件有什么构成
  • 购物商城网站 Java+Vue.js+SpringBoot,包括商家管理、商品分类管理、商品管理、在线客服管理、购物订单模块
  • LUA+Reids实现库存秒杀预扣减 记录流水 以及自己的思考
  • uefi协议设计目的
  • linux——磁盘和文件系统管理
  • python打卡训练营打卡记录day45
  • 数学运算在 OpenCV 中的核心作用与视觉效果演示
  • 本地部署大模型实战:使用AIStarter一键安装Ollama+OpenWeb教程(含最新版本更新指南)
  • 【图像处理3D】:焦距的像素单位标定
  • 使用API有效率地管理Dynadot域名,查看域名市场中所售域名的详细信息
  • 宠物车载安全座椅市场报告:解读行业趋势与投资前景
  • MyBatis-Plus深度全解:从入门到企业级实战
  • 旋转字符串的解题思路与算法分享
  • Offline Transition Modeling via Contrastive Energy Learning
  • 【iSAQB软件架构】软件架构中构建块的视图:黑箱、灰箱和白箱及其交互机制
  • vue和uniapp聊天页面右侧滚动条自动到底部
  • 计算机网络领域所有CCF-A/B/C类期刊汇总!
  • 低代码逻辑引擎配置化实战:三步穿透审批记录查询
  • 鞋内测量新方案:Moticon传感器鞋垫OpenGo在运动科学中的平衡测试应用
  • BIM Revit教程(十一)如何使用机器学习实现 MEP 布局自动化?
  • NumPy数组操作完全指南:从入门到精通
  • 【Zephyr 系列 9】Zephyr 与设备树机制详解:如何为你的板子编写 Devicetree
  • open3d:使用彩色图和深度图生成点云
  • 拆解实战案例:电商ERP管理系统从需求到原型全流程设计
  • 深度学习习题3
  • IDEA 包分层显示设置
  • Postgresql字符串操作函数