乐闻世界logo
搜索文章和话题

es6 类继承中 super 的作用

浏览18
6月24日 16:43

ES6中,super关键字在类继承中扮演着非常重要的角色。它有两个主要的作用:

  1. 在子类构造函数中调用父类的构造函数:在使用ES6类继承时,子类的构造函数需要调用父类的构造函数,这是通过super()实现的。这使得子类能够继承父类的属性。如果不调用super(),则子类的实例将无法正确构建,因为父类的一些初始化代码不会被执行。

    例如,假设我们有一个Person类和一个继承自PersonStudent类:

    javascript
    class Person { constructor(name) { this.name = name; } } class Student extends Person { constructor(name, studentID) { super(name); // 调用父类的构造函数来初始化父类中定义的属性 this.studentID = studentID; } } let student = new Student('Alice', '12345'); console.log(student.name); // 输出: Alice

    在这个例子中,super(name)调用了Person类的构造函数,初始化了name属性。

  2. 在子类的方法中调用父类的方法super也可以用来在子类中调用父类的方法。这对于扩展和重写父类行为非常有用。在子类的方法中,你可以通过super.methodName()的方式调用父类的方法。

    例如:

    javascript
    class Person { greet() { console.log(`Hello, my name is ${this.name}.`); } } class Student extends Person { study() { console.log(`${this.name} is studying with student ID ${this.studentID}.`); } greet() { super.greet(); // 调用父类的greet方法 this.study(); // 然后调用子类的study方法 } } let student = new Student('Alice', '12345'); student.greet(); // 输出: // Hello, my name is Alice. // Alice is studying with student ID 12345.

在这个例子中,我们重写了Student类的greet方法,在其中首先通过super.greet()调用了父类Person中的greet方法,然后调用了Student自己的study方法,这样就可以保留父类的行为的同时扩展新的行为。

综上所述,super在ES6类继承中是极为重要的,它允许子类构造函数和方法访问和调用父类的构造函数和方法。

标签:前端ES6