Menu
CoddyTech

super() 方法

本课属于 Coddy JavaScript 学习旅程的“面向对象编程”单元。第 27 课,共 56 课。

super() 方法使用父类的构造函数创建并初始化对象。你必须先调用它,才能向子类添加任何属性。

可以这样理解:父类构建对象的基础,而 super() 表示“先构建这个基础”,然后子类再添加自己的功能。

我们来看一下这个例子。创建一个父类:

class Employee {
  constructor(name) {
    this.name = name;
  }
}

现在创建一个继承父类的子类:

class Manager extends Employee {
  constructor(name, department) {
    super(name); // 用 name 调用父类的构造函数
    this.department = department;
  }
}

这里发生了什么:

  1. constructor(name, department) - Manager 需要 name 和 department
  2. super(name) - 将 name 传递给 Employee 的构造函数
  1. this.department - 设置 Manager 的专属属性

这样就创建了一个 Manager,它既有继承来的属性(name),也有自己的属性(department)!

创建子类的一个实例:

const myManager = new Manager("Sarah", "Engineering");
console.log(myManager.name);      // "Sarah"
console.log(myManager.department); // "Engineering"

在派生类的构造函数中,必须先调用 super(),才能使用 this。如果不调用 super(),JavaScript 会抛出引用错误。

challenge icon

挑战

给定一个继承自 Meal 的 Salad 类。这个 Salad 应同时具有名称和配料。

你的任务是完成 Salad 类的构造函数,具体步骤如下:

  1. 使用 name 属性调用 super()
  2. 设置 ingredients 属性

亲手试试

import { Meal } from './classes.js';
import { Salad } from './classes.js';

// 测试代码,请勿修改
const salad = new Salad("Caesar", ["lettuce", "croutons", "cheese"]);
console.log(salad.name);       // 应输出 "Caesar"
console.log(salad.ingredients); // 应输出 ["lettuce", "croutons", "cheese"]
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

面向对象编程中的所有课

自己练习: JavaScript 在线编译器