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

【ES6】js 中class的extends、super关键字用法和避坑点

在JavaScript中,使用class关键字可以实现面向对象编程。其中,extends和super是两个非常重要的关键字,它们分别用于实现类的继承和调用父类的方法。

一、extends关键字

extends关键字用于实现类的继承,它可以让一个子类继承父类的属性和方法。使用extends关键字时,需要指定要继承的父类,语法如下:

class 子类 extends 父类 {// 子类的属性和方法
}

例如,定义一个Person类和一个Student类,Student类继承自Person类:

class Person {constructor(name, age) {this.name = name;this.age = age;}sayHello() {console.log(`Hello, my name is ${this.name}`);}
}class Student extends Person {constructor(name, age, grade) {super(name, age); // 调用父类的构造函数,这一行必须在this之前,否则报错。因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,添加子类自己的实例属性和方法。如果不调用super()方法,子类就得不到自己的this对象。this.grade = grade;}study() {console.log(`I'm studying...`);}
}

在上面的例子中,Student类继承了Person类的构造函数和方法,并且定义了自己的属性和方法。在构造函数中,使用super关键字来调用父类的构造函数,以便初始化父类的属性和方法。
注意:
上面的super(name, age)必须在this之前。因为子类自己的this对象,必须先通过父类的构造函数完成塑造,得到与父类同样的实例属性和方法,然后再对其进行加工,添加子类自己的实例属性和方法。如果不调用super()方法,子类就得不到自己的this对象。

二、super关键字

super关键字用于调用父类的方法。在子类的方法中,可以使用super关键字来调用父类的方法。使用super关键字时,需要指定要调用的父类方法,语法如下:

super(); // 调用父类的构造函数
super.父类方法(); // 调用父类的方法
super.属性; // 访问父类的属性

例如,在上面的例子中,在Student类的构造函数中使用了super关键字来调用父类的构造函数:

constructor(name, age, grade) {super(name, age); // 调用父类的构造函数this.grade = grade;
}

另外,在子类的方法中,也可以使用super关键字来调用父类的方法。例如:

class Person {constructor(name) {this.name = name;}sayHello() {console.log(`Hello, my name is ${this.name}`);}
}class Student extends Person {constructor(name, grade) {super(name); // 调用父类的构造函数this.grade = grade;}sayHello() {super.sayHello(); // 调用父类的方法console.log(`I'm a student in grade ${this.grade}`);}
}

在上面的例子中,Student类继承了Person类,并重写了sayHello方法。在重写的sayHello方法中,使用super关键字来调用父类的sayHello方法。

http://www.lryc.cn/news/155595.html

相关文章:

  • mysql排名函数row_number()over(order by)和with * as 的用法
  • linux局域网IP地址冲突检测
  • 远距离WiFi模组方案,实现移动设备之间高效通信,无人机远程图传应用
  • Docker构建Springboot项目,并发布测试
  • flutter架构全面解析
  • QHttpServer
  • 21.3 CSS 背景属性
  • Ansible 常用命令50条
  • ceph源码阅读 erasure-code
  • C++ 之 命名空间
  • MyBatis关系映射
  • DVWA失效的访问控制
  • docker 笔记2 Docker镜像和数据卷
  • java springboot 时间格式序列化 UTC8
  • 攻防世界-Get-the-key.txt
  • MyBatisPlus之DQL编程控制
  • 本地使用GFPGAN进行图像人脸修复
  • Linux--进程概念
  • dex2oat编译模式、触发场景、命令强制执行
  • 深度学习 | TCN时间卷积神经网络模型答疑
  • Linux之修改服务端口号
  • LeetCode笔记:Weekly Contest 361
  • Springboot快速搭建Web API项目
  • 数据结构day06(单向循环链表、双向链表)
  • zabbix -- 新建主机
  • =>符号含义
  • Docker+Jenkins(blueocean)+Gitee构建CICD流水线实战
  • Redis快速入门
  • EasyExcel 修改导出的文件属性
  • 电子班牌云平台系统——智慧校园管理工具,多媒体信息发布、走班排课、家校互通、物联控制、教务管理、考勤管理、素质评价、日常办公