“is-a”关系
本课属于 Coddy JavaScript 学习旅程的“面向对象编程”单元。第 25 课,共 56 课。
“is-a”关系是一种简单的判断方法,可以用来确定继承是否合理。如果你可以说“X 是一种 Y”,而且听起来正确,那么 X 可能应该继承自 Y。
正确(使用继承):
- “狗是一种动物” →
class Dog extends Animal
- “汽车是一种车辆” →
class Car extends Vehicle
- “一本教科书是一种书” →
class Textbook extends Book
不正确(不要使用继承):
- “Driver 是 Car” → 不对,驾驶员使用汽车
- “车轮是汽车” → 不对,车轮是汽车的一部分
- “学生是教室” → 不,学生是在教室里
例如,我们来看看两个对象:
// 基类:它们本质上都是什么
class Book {
constructor(title, author, pages) {
this.title = title;
this.author = author;
this.pages = pages;
}
read() {
console.log(`Reading ${this.title} by ${this.author}`);
}
}
// Novel 是一种 Book(正确的继承关系)
class Novel extends Book {
constructor(title, author, pages, genre) {
super(title, author, pages);
this.genre = genre;
}
}
// 使用这些类
const fiction = new Novel("1984", "George Orwell", 328, "Dystopian");
fiction.read(); // "Reading 1984 by George Orwell",继承自 Book
挑战
给定一个 ElectronicDevice 类和一个 Smartphone 类。Smartphone 是一种具有额外功能的 ElectronicDevice。你的任务是创建一个 `myPhone` 对象,品牌为 "Samsung",型号为 “Galaxy S23”。
亲手试试
import { ElectronicDevice } from './electronicDevice.js';
import { Smartphone } from './smartphone.js';
// TODO:创建一个品牌为 "Samsung"、型号为 “Galaxy S23” 的 `myPhone` 对象。
// 测试代码,请勿修改
console.log(myPhone.turnOn()); // 应输出 "Samsung Galaxy S23 is now ON"这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
8整理 OOP 代码
将类组织到模块中自己练习: JavaScript 在线编译器