当前位置: 首页 > 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;
}// 然后实现类似的继承逻辑
http://www.lqws.cn/news/142651.html

相关文章:

  • 探秘半导体制造设备钢结构防震基座的承重奥秘-江苏泊苏系统集成有限公司
  • 基于BI PaaS架构的衡石HENGSHI SENSE平台技术解析:重塑企业级数据分析基座
  • 「数据分析 - NumPy 函数与方法全集」【数据分析全栈攻略:爬虫+处理+可视化+报告】
  • C语言| 指针引用数组元素
  • C++定长内存块的实现
  • 在Docker里面运行Docker
  • 鸿蒙Next开发真机调试签名申请流程
  • Vue3 通用框架结构
  • 在 CentOS 上安装 Docker 和 Docker Compose 并配置使用国内镜像源
  • html - <mark>标签
  • 基于Docker Compose部署Java微服务项目
  • docker快速部署OS web中间件 数据库 编程应用
  • ES6中的Map与Set数据结构的简单应用
  • Python html 库用法详解
  • 【Spark征服之路-2.2-安装部署Spark(二)】
  • ajax学习手册
  • 会计 - 金融负债和权益工具
  • 腾讯云V3签名
  • Zookeeper 和 Kafka 版本与 JDK 要求
  • 从二叉树到 STL:揭开 set 容器的本质与用法
  • CIFAR10的使用
  • Vue ②-computed || watch || 指令
  • 【Algorithm】Union-Find简单介绍
  • 《区间DP》题集
  • 【十年技术演进深度解构:车载充电机(OBC)将成为新能源汽车的“能源大脑”】
  • 云计算 Linux Rocky day05【rpm、yum、history、date、du、zip、ln】
  • 智慧照明:集中控制器、单双灯控制器与智慧灯杆网关的高效协同
  • npm install 报错:npm error: ...node_modules\deasync npm error command failed
  • python入门(1)
  • AI Agent 能否理解人类的行为和决策?