继承, 多态和代码复用

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 中可以通过合理运用这些概念来提高代码的可读性、可维护性和可扩展性。