继承, 多态和代码复用
2023-10-29
2分钟阅读时长
在 JavaScript 中,继承、多态和代码复用是面向对象编程的重要概念。
继承(Inheritance)
继承是一种机制,允许一个对象(子类)从另一个对象(父类)继承属性和方法。子类可以使用父类的属性和方法,同时还可以添加自己的属性和方法,以满足特定需求。
在 JavaScript 中,继承可以通过原型链和 ES6 的类来实现,
- 其中原型链是早期的一种继承方式,通过原型链,一个对象可以从另一个对象继承属性和方法;
- 而类是在 ES6 中引入的更现代化、更易读的继承方式。通过类,我们可以使用 extends 关键字创建一个类,并通过 super 关键字调用父类的构造函数和方法,实现继承的效果。
示例代码:
// 父类
class Animal {
constructor(name) {
this.name = name;
}
eat() {
console.log(`${this.name} is eating.`);
}
}
// 子类继承父类
class Dog extends Animal {
bark() {
console.log(`${this.name} is barking.`);
}
}
const dog = new Dog("Bobby");
dog.eat(); // 输出:Bobby is eating.
dog.bark(); // 输出:Bobby is barking.
多态(Polymorphism)
多态是指同一操作作用于不同的对象时,可以产生不同的行为。在 JavaScript 中,多态通常通过方法的重写和方法的重载来实现。
方法重写示例代码:
class Animal {
constructor(name) {
this.name = name;
}
makeSound() {
console.log("Animal is making a sound.");
}
}
class Dog extends Animal {
makeSound() {
console.log("Dog is barking.");
}
}
class Cat extends Animal {
makeSound() {
console.log("Cat is meowing.");
}
}
const animals = [new Dog(), new Cat()];
animals.forEach((animal) => animal.makeSound());
// 输出:
// Dog is barking.
// Cat is meowing.
方法重载示例代码:
class Calculator {
add(a, b) {
return a + b;
}
add(a, b, c) {
return a + b + c;
}
}
const calculator = new Calculator();
console.log(calculator.add(2, 3)); // 输出:5
console.log(calculator.add(2, 3, 4)); // 输出:9
代码复用
代码复用是指通过某种方式减少重复代码的编写,提高代码的可维护性和可扩展性。JavaScript 提供了多种实现代码复用的方式,如函数、类、模块等。
函数复用示例代码:
function add(a, b) {
return a + b;
}
function subtract(a, b) {
return a - b;
}
console.log(add(2, 3)); // 输出:5
console.log(subtract(5, 3)); // 输出:2
类复用示例代码:
class MathUtils {
static add(a, b) {
return a + b;
}
static subtract(a, b) {
return a - b;
}
}
console.log(MathUtils.add(2, 3)); // 输出:5
console.log(MathUtils.subtract(5, 3)); // 输出:2
模块复用示例代码:
// mathUtils.js
export function add(a, b) {
return a + b;
}
export function subtract(a, b) {
return a - b;
}
// main.js
import { add, subtract } from "./mathUtils.js";
console.log(add(2, 3)); // 输出:5
console.log(subtract(5, 3)); // 输出:2
继承、多态和代码复用是面向对象编程的重要特性,在 JavaScript 中可以通过合理运用这些概念来提高代码的可读性、可维护性和可扩展性。