“has-a”与“is-a”关系
本课属于 Coddy JavaScript 学习旅程的“面向对象编程”单元。第 47 课,共 56 课。
在面向对象编程中,对象之间主要有两种关系:“有一个”(组合)和“是一个”(继承)。继承会创建父子层级关系,而组合则通过组合较小且专注的组件来构建对象。
我们先通过继承来了解“is-a”关系:
class Animal {
constructor(name) {
this.name = name;
}
eat() {
console.log(`${this.name} is eating.`);
}
}
// Dog “is-a” Animal:继承关系
class Dog extends Animal {
bark() {
console.log(`${this.name} says woof!`);
}
}现在,我们通过组合来看看“拥有”关系:
class Engine {
start() {
console.log("Engine started");
}
}
// Car "has-a" Engine:组合关系
class Car {
constructor() {
this.engine = new Engine(); // 组合
}
startCar() {
this.engine.start();
console.log("Car is running");
}
}关键区别:
- “is-a”(继承):Dog 是一种 Animal
- “has-a”(组合):Car 有一个 Engine
挑战
已提供组件类(Processor、Memory)以及大部分 Computer 类。你的任务是完成 computer.js 文件中的构造函数:
- 使用
Processor类创建一个processor属性 - 使用
Memory类创建一个memory属性 - 将 processorSpeed 传递给 Processor 构造函数,并将 memorySize 传递给 Memory 构造函数
亲手试试
import { Computer } from './computer.js';
const myComputer = new Computer(3.5, 16);
myComputer.start();这节课包含一个小测验。开始学习即可作答,并记录你的进度。
面向对象编程中的所有课
8整理 OOP 代码
将类组织到模块中自己练习: JavaScript 在线编译器