📜  javascript中所谓的抽象(1)

📅  最后修改于: 2023-12-03 15:31:47.142000             🧑  作者: Mango

JavaScript中所谓的抽象

在面向对象编程中,抽象是一种重要的概念。它允许我们隐藏复杂的实现细节,从而更容易地理解和使用代码。在JavaScript中,抽象可以通过对象和函数来实现。

抽象类

抽象类是一种不能被实例化的类,通常用作基类。它可以被继承,并且可以包含抽象方法。抽象方法是一种没有实现的方法,必须在子类中被实现。以下是一个示例:

abstract class Animal {
  constructor(name) {
    this.name = name;
  }
  // 抽象方法
  makeSound() {
    throw new Error('必须在子类中实现');
  }
}

class Cat extends Animal {
  makeSound() {
    console.log('喵喵喵');
  }
}

let cat = new Cat('小花');
cat.makeSound(); // 输出 '喵喵喵'

在这个例子中,Animal类是一个抽象类,它包含一个抽象方法makeSound()。这个方法必须在子类中被实现。Cat类继承自Animal类,并实现了makeSound()方法。

接口

接口是一种规范,它定义了一组方法和属性,但没有实现。实现接口的类必须实现接口中定义的所有方法和属性。以下是一个示例:

interface Shape {
  color: string;
  getArea(): number;
}

class Square implements Shape {
  constructor(private length: number, public color: string) {}
  getArea() {
    return this.length ** 2;
  }
}

let square = new Square(5, 'red');
console.log(square.color); // 输出 'red'
console.log(square.getArea()); // 输出 25

在这个例子中,Shape接口定义了一个color属性和getArea()方法。Square类实现了Shape接口,必须包含color属性和getArea()方法。注意,在Square类中,构造函数使用了private和public关键字,这是一种缩写方式,同时定义了一个叫做length的私有属性和一个叫做color的公有属性。

函数抽象

函数抽象是一种将函数作为参数传递给另一个函数的技术。这使得我们可以写出通用的函数,这些函数可以处理不同类型的数据。

以下是一个示例:

function calculate(operation, x, y) {
  return operation(x, y);
}

function add(x, y) {
  return x + y;
}

function subtract(x, y) {
  return x - y;
}

console.log(calculate(add, 5, 3)); // 输出 8
console.log(calculate(subtract, 5, 3)); // 输出 2

在这个例子中,calculate()函数接受三个参数:一个操作函数,以及两个数字x和y。操作函数将对这两个数字进行计算,并返回结果。add()和subtract()函数是两个不同的操作函数,它们通过calculate()函数被调用。这个函数抽象出了计算过程的通用部分,使得我们可以更容易地处理不同的计算类型。

总之,抽象是一种强大的程序设计技术,它使得我们可以写出更通用、更清晰、更易于维护的代码。在JavaScript中,可以使用抽象类、接口和函数抽象来实现抽象。