返回

知识归纳与沉淀:JavaScript 面向对象精要笔记

前端

JavaScript 面向对象精要:知识归纳与沉淀

高程面向对象这块内容介绍的比较浅显,个人觉得这本小书是高程的补充,看完之后觉得收获匪浅,所以做了个笔记,以备后询。

面向对象编程概述

面向对象编程(OOP)是一种编程范式,它将对象作为基本单元,对象可以包含数据和方法。OOP 的主要思想是将现实世界中的实体抽象成计算机中的对象,并通过对象之间的交互来模拟现实世界中的行为。

JavaScript 中的面向对象编程

JavaScript 是一种面向对象的语言,它支持类、实例、继承、多态、封装和抽象等面向对象的核心思想和基本概念。

类是对象的模板,它定义了对象的数据和方法。在 JavaScript 中,类使用 class 声明。

class Person {
  constructor(name, age) {
    this.name = name;
    this.age = age;
  }

  greet() {
    console.log(`Hello, my name is ${this.name} and I am ${this.age} years old.`);
  }
}

实例

实例是类的具体对象,它具有类中定义的数据和方法。在 JavaScript 中,实例使用 new 关键字创建。

const person = new Person('John', 30);
person.greet(); // Hello, my name is John and I am 30 years old.

继承

继承是一种创建新类的方式,新类可以继承父类的属性和方法。在 JavaScript 中,继承使用 extends 关键字实现。

class Employee extends Person {
  constructor(name, age, salary) {
    super(name, age);
    this.salary = salary;
  }

  getSalary() {
    return this.salary;
  }
}

多态

多态是指父类和子类的方法具有相同的名称,但实现不同。在 JavaScript 中,多态可以通过继承和方法重写实现。

class Manager extends Employee {
  constructor(name, age, salary, department) {
    super(name, age, salary);
    this.department = department;
  }

  getSalary() {
    return this.salary + 1000;
  }
}

const employee = new Employee('John', 30, 10000);
const manager = new Manager('Mary', 35, 15000, 'Sales');

console.log(employee.getSalary()); // 10000
console.log(manager.getSalary()); // 16000

封装

封装是指将数据和方法绑定在一起,并对外隐藏数据的实现细节。在 JavaScript 中,封装可以通过私有属性和方法实现。

class Person {
  #name;
  #age;

  constructor(name, age) {
    this.#name = name;
    this.#age = age;
  }

  getName() {
    return this.#name;
  }

  getAge() {
    return this.#age;
  }
}

const person = new Person('John', 30);
console.log(person.#name); // 报错
console.log(person.getName()); // John

抽象

抽象是指将类的公共接口和私有实现分开,以便类的实现细节对用户透明。在 JavaScript 中,抽象可以通过抽象类实现。

abstract class Shape {
  constructor() {
    if (this.constructor === Shape) {
      throw new Error('Shape is an abstract class and cannot be instantiated.');
    }
  }

  getArea() {
    throw new Error('getArea() is an abstract method and must be implemented in a subclass.');
  }
}

class Rectangle extends Shape {
  constructor(width, height) {
    super();
    this.width = width;
    this.height = height;
  }

  getArea() {
    return this.width * this.height;
  }
}

const rectangle = new Rectangle(10, 5);
console.log(rectangle.getArea()); // 50

总结

面向对象编程是一种强大的编程范式,它可以帮助我们构建更复杂、更易于维护的程序。JavaScript 作为一种面向对象的语言,支持类、实例、继承、多态、封装和抽象等面向对象的核心思想和基本概念。学习和掌握这些概念,可以帮助我们更好地理解和使用 JavaScript 来构建各种应用程序。