返回

JS 继承图解

前端

概述

继承是面向对象编程中最重要的概念之一,它允许我们创建新类,这些新类继承并扩展现有类的特性和行为。在 JavaScript 中,继承主要通过原型链来实现。本文将详细介绍 JavaScript 中的继承机制,并通过图解的方式帮助你理解其原理。

接口继承与实现继承

接口继承

接口继承是指一个类继承另一个类的公共方法和属性,但并不继承其实现。这类似于 Java 中的接口继承,它允许我们定义一个类,该类包含一组方法和属性,但并不提供这些方法和属性的实现。

在 JavaScript 中,接口继承可以通过使用 implements 来实现。例如:

interface Animal {
  eat();
  sleep();
}

class Dog implements Animal {
  eat() {
    console.log("The dog is eating.");
  }

  sleep() {
    console.log("The dog is sleeping.");
  }
}

在这个例子中,Dog 类实现了 Animal 接口。这意味着 Dog 类必须实现 eat()sleep() 方法,但它可以自由地决定如何实现这些方法。

实现继承

实现继承是指一个类继承另一个类的所有属性和方法,包括其实现。这类似于 Java 中的类继承,它允许我们创建一个新类,该类包含另一个类的所有特性和行为。

在 JavaScript 中,实现继承可以通过使用 extends 关键字来实现。例如:

class Animal {
  constructor(name) {
    this.name = name;
  }

  eat() {
    console.log("The animal is eating.");
  }

  sleep() {
    console.log("The animal is sleeping.");
  }
}

class Dog extends Animal {
  constructor(name) {
    super(name);
  }

  bark() {
    console.log("The dog is barking.");
  }
}

在这个例子中,Dog 类继承了 Animal 类。这意味着 Dog 类具有 Animal 类的所有属性和方法,包括其实现。此外,Dog 类还定义了一个新的方法 bark()

原型链

在 JavaScript 中,每个对象都有一个原型对象。原型对象是一个特殊的对象,它包含该对象的所有属性和方法。当我们访问一个对象的属性或方法时,JavaScript 会首先在该对象中查找,如果没有找到,则会沿着原型链向上查找,直到找到该属性或方法。

例如,在上面的例子中,Dog 类继承了 Animal 类。这意味着 Dog 对象的原型对象是 Animal 对象。当我们访问一个 Dog 对象的属性或方法时,JavaScript 会首先在该 Dog 对象中查找,如果没有找到,则会沿着原型链向上查找,直到找到该属性或方法。

原型链的机制可以帮助我们理解 JavaScript 中的继承。当我们创建一个 Dog 对象时,JavaScript 会创建一个新的对象,该对象的原型对象是 Animal 对象。这意味着 Dog 对象具有 Animal 类的所有属性和方法,包括其实现。此外,Dog 对象还定义了一个新的方法 bark()

继承图解

为了更好地理解 JavaScript 中的继承机制,我们绘制了一个继承图解:

+----------------+
| Animal         |
+----------------+
    ^
    |
+--------------------+
| Dog                |
+--------------------+
    ^
    |
+----------------------+
| Golden Retriever    |
+----------------------+

在这个图解中,Animal 类位于最顶端,它包含所有动物共有的属性和方法。Dog 类继承了 Animal 类,这意味着它具有 Animal 类的所有属性和方法,包括其实现。此外,Dog 类还定义了一个新的方法 bark()Golden Retriever 类继承了 Dog 类,这意味着它具有 Dog 类的所有属性和方法,包括其实现。此外,Golden Retriever 类还定义了一个新的方法 fetch()

总结

JavaScript 中的继承是通过原型链来实现的。当我们创建一个新对象时,JavaScript 会创建一个新的对象,该对象的原型对象是其父类的对象。这意味着新对象具有父类对象的所有属性和方法,包括其实现。此外,新对象还可以定义新的属性和方法。

继承是面向对象编程中一项重要的概念,它可以帮助我们创建更复杂、更可重用的代码。在 JavaScript 中,继承通过原型链来实现,这使得我们可以轻松地创建一个新类,该类继承另一个类的所有特性和行为。