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;
}
}这里发生了什么:
constructor(name, department)- Manager 需要 name 和 departmentsuper(name)- 将name传递给 Employee 的构造函数
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 会抛出引用错误。
挑战
给定一个继承自 Meal 的 Salad 类。这个 Salad 应同时具有名称和配料。
你的任务是完成 Salad 类的构造函数,具体步骤如下:
- 使用 name 属性调用
super() - 设置
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"]这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
8整理 OOP 代码
将类组织到模块中自己练习: JavaScript 在线编译器