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

【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;
}// 然后实现类似的继承逻辑

相关文章:

  • ARM处理器工作模式
  • NineData云原生智能数据管理平台新功能发布|2025年5月版
  • 算法篇 八大排序(冒泡 插入 选择 堆 希尔 快排 归并 计数)
  • Pandas和Django的示例Demo
  • 使用联邦多轨迹图神经网络(GNNs)结合稀缺数据预测婴儿脑连接|文献速递-深度学习医疗AI最新文献
  • Honor of Kings 2025.06.05
  • 【无标题】路径着色问题的革命性重构:拓扑色动力学模型下的超越与升华
  • Android四大组件通讯指南:Kotlin版组件茶话会
  • .net Span类型和Memory类型
  • 02 Deep learning神经网络的编程基础 逻辑回归--吴恩达
  • 实现基于Yolo的异常聚集算法
  • 任务调度器-关于中心化调度 vs 去中心化调度的核心区别
  • C++11 尾随返回类型:从入门到精通
  • 在 UE5 蓝图中配置Actor类型的Asset以作为位置和旋转设置目标
  • 【python深度学习】Day 45 Tensorboard使用介绍
  • 中国企业在泰国推广ERP(SAP、Oracle)-增值税(VAT)处理关键规则 及ERP系统配置要点
  • Spring中@Primary注解的作用与使用
  • Ruoyi多主键表的增删改查
  • 【美团技术团队】从实际案例聊聊Java应用的GC优化
  • 解决 Git 访问 GitHub 时的 SSL 错误
  • 北京h5网站建设报价/什么是网络整合营销
  • dw网页设计成品免费学霸/重庆seo教程博客
  • 珠海移动网站建设报价/seo页面优化的方法
  • 做电商网站公司/新闻热点事件2021(最新)
  • 弄个盈利网站做什么/杭州网络推广网络优化
  • 西安的软件公司哪个比较厉害/宁波正规站内优化seo