分享JavaScript 中的几种继承方式

分享JavaScript 中的几种继承方式

为什么需要继承?

在编写代码的过程中,我们不可能每一次都从零开始写。很多时候,我们需要利用现有的代码来实现新的功能,这就是继承的一个重要应用场景。

我们之所以需要继承,是因为继承可以让我们复用代码,避免重复劳动和代码冗余。当我们需要对某一种对象进行扩展时,继承就是我们的好选择。

继承的几种方式

在JavaScript中,实现继承的方式主要有以下几种:

原型继承

原型继承是JavaScript中最常见的一种继承方式,是以原型链为基础实现的。

示例:使用原型继承创建一个对象

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

Person.prototype.sayName = function() {
  console.log(`My name is ${this.name}`);
};

function Student(name, age, school) {
  this.school = school;
  Person.call(this, name, age);
}

Student.prototype = Object.create(Person.prototype);
Student.prototype.saySchool = function() {
  console.log(`I am studying in ${this.school}`);
};

const student1 = new Student('Tom', 18, 'MIT');
student1.sayName(); // My name is Tom
student1.saySchool(); // I am studying in MIT

构造函数继承

构造函数继承是通过借用构造函数来实现继承的,能够一次性地继承实例属性和方法。

示例:使用构造函数继承创建一个对象

function Person(name) {
  this.name = name;
  this.sayName = function() {
    console.log(`My name is ${this.name}`);
  };
}

function Student(name, school) {
  Person.call(this, name);
  this.school = school;
  this.saySchool = function() {
    console.log(`I am studying in ${this.school}`);
  }
}

const student1 = new Student('Tom', 'MIT');
student1.sayName(); // My name is Tom
student1.saySchool(); // I am studying in MIT

组合继承

组合继承是把原型继承和构造函数继承结合在一起,既可以继承实例属性和方法,也可以继承原型属性和方法。

示例:使用组合继承创建一个对象

function Person(name) {
  this.name = name;
}

Person.prototype.sayName = function() {
  console.log(`My name is ${this.name}`);
};

function Student(name, school) {
  Person.call(this, name);
  this.school = school;
}

Student.prototype = new Person();
Student.prototype.constructor = Student;
Student.prototype.saySchool = function() {
  console.log(`I am studying in ${this.school}`);
};

const student1 = new Student('Tom', 'MIT');
student1.sayName(); // My name is Tom
student1.saySchool(); // I am studying in MIT

extends关键字继承

ES6的class语法提供了一种更为简洁的继承方式——extends关键字。通过extends关键字可以快速实现原型继承。

示例:使用extends关键字继承创建一个对象

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

  sayName() {
    console.log(`My name is ${this.name}`);
  }
}

class Student extends Person {
  constructor(name, school) {
    super(name);
    this.school = school;
  }

  saySchool() {
    console.log(`I am studying in ${this.school}`);
  }
}

const student1 = new Student('Tom', 'MIT');
student1.sayName(); // My name is Tom
student1.saySchool(); // I am studying in MIT

以上就是JavaScript中常用的几种继承方式,选择哪种方法要根据实际需求来定。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:分享JavaScript 中的几种继承方式 - Python技术站

(0)
上一篇 2023年6月26日
下一篇 2023年6月26日

相关文章

  • linux服务器磁盘扩容的方法(图)

    以下是“Linux服务器磁盘扩容的方法(图)”的完整攻略: 1. 查看磁盘空间 在进行磁盘扩容之前,先需要查看当前的磁盘空间占用情况,可以使用以下命令来查看: df -h 该命令会输出当前系统中已经挂载的文件系统的使用情况。其中,-h参数可以让输出的结果更易读。 2. 调整硬盘大小 硬盘调整可以通过工具进行,例如VMware或者VirtualBox提供了图像…

    other 2023年6月27日
    00
  • Win11上DNS服务器错误不可用怎么办?DNS服务器不可用修复方法

    如果在使用Windows 11操作系统时,出现了“DNS服务器不可用”的错误提示,那么可以尝试以下修复方法: 1. 修改DNS服务器地址 如果使用的是电信或联通宽带,可以设置DNS服务器地址为以下两个: 电信DNS服务器地址:202.96.209.6 或 202.96.209.133 联通DNS服务器地址:123.125.81.6 或 140.207.198…

    other 2023年6月26日
    00
  • iOS13.2开发者预览版beta1更新了什么 更新内容及升级方法(附全机型固件及描述文件下载

    iOS 13.2开发者预览版beta1更新内容及升级方法攻略 更新内容 iOS 13.2开发者预览版beta1已经发布,其中包含了以下更新内容: Deep Fusion摄影技术:适用于iPhone 11、iPhone 11 Pro和iPhone 11 Pro Max的新摄影技术,可提供更出色的细节和更低的噪音水平。 支持AirPods Pro:可定制的降噪功…

    other 2023年6月26日
    00
  • maven 指定version不生效的问题

    Maven 指定 version 不生效的问题攻略 在使用 Maven 构建项目时,有时候我们需要指定依赖库的版本号,但是发现指定的版本号并没有生效。这可能是由于以下几个原因导致的: 1. 依赖库版本冲突 当项目中存在多个依赖库,且它们之间存在版本冲突时,Maven 可能会选择一个不是我们所期望的版本。为了解决这个问题,我们可以使用 Maven 提供的 De…

    other 2023年8月3日
    00
  • Django零基础入门之自定义标签及模板中的使用

    让我们来详细讲解“Django零基础入门之自定义标签及模板中的使用”的完整攻略。 什么是Django自定义标签 Django中的自定义标签是一种扩展模板标签的功能,而这些标签提供了在模板中执行特定的功能,可以扩展Django的模板系统和标记语言。 如何定义自定义标签 1.定义标签函数 创建一个保存标签函数的Python模块,通常称为templatetags。…

    other 2023年6月25日
    00
  • IOS视图控制器的生命周期实例详解

    我们来详细讲解一下 “iOS视图控制器的生命周期实例详解”。 什么是视图控制器的生命周期 在iOS开发中,每个视图控制器都有自己的生命周期,即它从创建到销毁的整个过程。视图控制器的生命周期非常重要,因为它可以帮助我们在不同的时刻做出响应和处理一些必要的逻辑。 视图控制器的生命周期分为以下几个阶段: 初始化阶段: 视图控制器被创建时调用,可以在此阶段进行一些初…

    other 2023年6月27日
    00
  • ubuntu-12.04下安装postgresql

    Ubuntu 12.04下安装PostgreSQL PostgreSQL是一款功能强大的开源关系型数据库系统,其可靠性和扩展性备受认可。如果你需要在Ubuntu 12.04上安装PostgreSQL,下面的步骤将为你提供指导。 步骤1:更新系统 在继续执行PostgreSQL安装之前,请务必确保系统已经更新到了最新版本。输入以下命令来完成所有的更新: sud…

    其他 2023年3月28日
    00
  • 新技巧:Linux系统常见6种紧急情况处理方法

    新技巧:Linux系统常见6种紧急情况处理方法 介绍 在Linux系统中,有时候会发生紧急情况,例如系统崩溃、硬盘故障等等,这些问题可能会导致数据的丢失和系统瘫痪。因此,我们需要掌握Linux系统常见的六种紧急情况处理方法,来应对这些突发事件。 六种紧急情况处理方法 1. 恢复GRUB引导 GRUB是Linux系统的引导程序,它能够加载操作系统并引导启动。如…

    other 2023年6月27日
    00
合作推广
合作推广
分享本页
返回顶部