class 是一种特殊的函数,它允许我们创建具有相同属性和方法的对象。super 用于调用父类的构造函数,而 extends 关键字用于一个类继承另一个类的属性和方法。在JavaScript ES6中,class、super和extends是实现面向对象编程的重要关键词,它们分别用于定义类、调用父类方法和实现类的继承,为JavaScript的面向对象编程带来了清晰和简洁的语法结构。
Class类的定义与使用
1. 定义类的属性和方法
class 关键字用于声明一个类,其后紧跟着类名。

类的属性和方法在类体中定义,方法可以使用简写的函数声明方式。
2. 创建类的实例
通过新建操作符(new)来创建类的实例。
类的所有实例都能访问到类中定义的属性和方法。
Extends实现类的继承
1. 继承父类属性和方法
extends 关键字用于指明子类继承自哪个父类。
子类自动拥有父类公开的属性和方法。
2. 覆盖和扩展父类方法
子类可以定义与父类同名的方法,以覆盖或扩展父类的功能。
JavaScript中方法的名称相同即视为同一种方法,不受参数数量的影响。
Super调用父类构造函数
1. 使用super调用父类构造器
super 关键字用于在子类的构造函数中调用父类的构造函数。
这确保了父类的初始化逻辑得以执行。
2. Super的调用时机
在子类构造函数中,super 必须在使用this关键字之前调用。
这是为了确保父类的属性已初始化完成。
相关问题与解答
Q1: 如何在子类中调用父类中被覆盖的方法?
答案: 可以通过使用super关键字加上点运算符(.)后跟上父类中的方法名来调用,如果有一个父类方法名为parentMethod,在子类中可以这样调用:super.parentMethod()。
Q2: 在子类构造函数中如果不调用super会怎么样?
答案: 如果子类的构造函数中没有调用super,并且父类也有自己的构造函数,那么当创建子类的实例时,JavaScript会抛出一个错误,这是因为在子类构造函数中使用this之前,必须先调用父类的构造函数,不调用super会导致基类的初始化过程未完成,从而可能导致错误或意料之外的行为。
ES6引入的class、super和extends为JavaScript的面向对象编程提供了更加强大和灵活的语法支持,通过这些关键字,开发者能够更直观地实现类的继承结构,以及在子类中方便地调用和扩展父类的功能,极大地提高了代码的可读性和复用性。