js的三种继承方式详解

下面我将详细讲解 JavaScript 的三种继承方式。

1. 原型继承

原型继承是 JavaScript 中最基本的继承方式,它实现的原理是通过使用 prototype 属性。在原型继承中,子类的原型对象指向父类的实例对象,从而实现继承。

以下是一个实现原型继承的示例代码:

function Person(name, age) {
    this.name = name;
    this.age = age;
}
Person.prototype.sayHello = function() {
    console.log("Hello, my name is " + this.name + ", I'm " + this.age + " years old.");
}

function Student(name, age, grade) {
    this.grade = grade;
    Person.call(this, name, age);
}
Student.prototype = Object.create(Person.prototype);
Student.prototype.constructor = Student;

let stu = new Student("Tom", 20, 3);
stu.sayHello(); // Hello, my name is Tom, I'm 20 years old.
console.log(stu instanceof Student); // true
console.log(stu instanceof Person); // true

在上面的代码中,我们定义了一个 Person 构造函数,它拥有一个 sayHello 方法。然后我们定义了一个 Student 构造函数,我们通过 Object.create 方法使 Student 的原型对象指向 Person 的原型对象,实现继承,然后重置其 constructor 属性为 StudentObject.create 会将 constructor 属性重置为 Person)。最后我们创建一个 Student 实例,并且可以使用继承自 PersonsayHello 方法。

2. 构造函数继承

构造函数继承主要是通过在子类中调用父类构造函数实现的。在构造函数继承中,子类实例会继承父类的属性和方法。但是,这种继承方式无法继承父类原型上的属性和方法。

以下是一个实现构造函数继承的示例代码:

function Person(name, age) {
    this.name = name;
    this.age = age;
}
Person.prototype.sayHello = function() {
    console.log("Hello, my name is " + this.name + ", I'm " + this.age + " years old.");
}

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

let stu = new Student("Tom", 20, 3);
stu.sayHello(); // TypeError: stu.sayHello is not a function
console.log(stu instanceof Student); // true
console.log(stu instanceof Person); // false

在上面的代码中,我们定义了一个 Person 构造函数,然后我们定义了一个 Student 构造函数,通过在 Student 中调用 Person 的构造函数实现属性和方法的继承。我们可以创建一个 Student 实例,并且可以使用从 Person 中继承的属性,但无法访问它的 prototype,因为 prototype 对象上的属性和方法不会继承到子类上。

3. 组合继承

组合继承是上述两种继承方式的结合体,它继承了构造函数继承和原型继承的优点。在组合继承中,通过在子类中调用父类构造函数实现属性的继承,然后将子类的原型对象指向父类的原型对象,实现方法的继承。

以下是一个实现组合继承的示例代码:

function Person(name, age) {
    this.name = name;
    this.age = age;
}
Person.prototype.sayHello = function() {
    console.log("Hello, my name is " + this.name + ", I'm " + this.age + " years old.");
}

function Student(name, age, grade) {
    Person.call(this, name, age);
    this.grade = grade;
}
Student.prototype = new Person();
Student.prototype.constructor = Student;

let stu = new Student("Tom", 20, 3);
stu.sayHello(); // Hello, my name is Tom, I'm 20 years old.
console.log(stu instanceof Student); // true
console.log(stu instanceof Person); // true

在上面的代码中,我们定义了一个 Person 构造函数,它拥有一个 sayHello 方法。然后我们定义了一个 Student 构造函数,并在其中调用了 Person 的构造函数,实现属性的继承。最后我们通过将 Student 的原型对象指向一个新的 Person 的实例对象,实现从 Person 中继承方法。我们可以创建一个 Student 实例,并且可以使用从 Person 中继承的属性和方法。

以上就是 JavaScript 中的三种继承方式,不同的继承方式可以根据实际情况选择使用,从而更好地解决问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:js的三种继承方式详解 - Python技术站

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

相关文章

  • Windows 11的这19个新功能,你都知道吗?

    Windows 11的这19个新功能,你都知道吗? Windows 11是微软最新发布的操作系统,带来了许多令人兴奋的新功能。在这篇攻略中,我们将详细介绍这19个新功能,并提供两个示例说明。 1. 全新的开始菜单和任务栏 Windows 11带来了全新的开始菜单和任务栏设计。开始菜单现在位于屏幕中间,具有现代化的外观和感觉。任务栏也进行了重新设计,使其更加简…

    other 2023年9月6日
    00
  • JavaScript之BOM+DOM

    本文将介绍JavaScript中BOM和DOM的完整攻略,包括BOM和DOM的基本概念、常用对象和方法、事件处理等内容。同时,本文还将提供两个示例说明,以帮读者更好地理解BOM和DOM的使用方法。 1. BOM和DOM的基本概念 BOM(Browser Object Model)是浏览器对象模型,它提供了访问浏览器窗口和框架的对象和方法。BOM包括windo…

    other 2023年5月5日
    00
  • ASP.NET Table 表格控件的使用方法

    ASP.NET Table 表格控件的使用方法 在 ASP.NET 网页设计中,Table 表格控件经常用于布局和显示数据。本文将详细讲解Table 表格控件的使用方法。 一、基本语法 Table 表格控件的基本语法如下: <asp:Table runat="server"> <!– Table 表格内容 –>…

    other 2023年6月27日
    00
  • cifs-utils共享

    以下是“cifs-utils共享”的完整攻略: cifs-utils共享 cifs-utils是一个用于Linux系统的CIFS(Common Internet File System)客户端工具包,它允许您在Linux系统上挂载Windows共享文件夹。本攻略将介绍如何使用cifs-utils在Linux系统上共享文件夹。 步骤1:安装cifs-utils…

    other 2023年5月7日
    00
  • 给mongodb添加索引

    以下是关于如何给MongoDB添加索引的详细攻略: 步骤一:选择要添加索引的集合 在MongoDB中,索引是在集合级上创建的。因此,首需要选择要添加索引的集合。例如,如果要添加索引以加快“users”集合中的“username”字段,可以使用以下命令选择集合: use users 步骤二:创建索引 MongoDB支持多种类型的索引,包括单字段索引、复合索引、…

    other 2023年5月7日
    00
  • iPadOS 13.5.1固件下载 iPadOS 13.5.1支持机型与固件下载地址

    iPadOS 13.5.1固件下载攻略 iPadOS 13.5.1是苹果公司最新发布的操作系统版本,它带来了一些修复和改进。如果你想升级你的iPad设备到iPadOS 13.5.1,下面是一个详细的攻略,包括支持的机型和固件下载地址。 支持的机型 iPadOS 13.5.1支持以下iPad设备: iPad Pro 12.9英寸(第一代及以后) iPad Pr…

    other 2023年8月4日
    00
  • linux常用基本命令[find]用法(1)-ghostwu-博客园

    find命令是Linux中常用的命令之一,用于在指定目录下查找文件或目录。以下是关于find命令的详细攻略: 命令概述 find命令语法如下: find [path] [expression] 其中,path表示要查找的目录路径,expression表示查找表达式。 常用选项 find命令有许多选项,以下是一些常用的选项: -name:按照文件名查找。 -t…

    other 2023年5月7日
    00
  • 10种excel多条件查找函数的使用方法汇总

    10种Excel多条件查找函数的使用方法汇总 Excel提供了多种函数来进行多条件查找,这些函数可以帮助用户在大量数据中快速定位所需信息。以下是10种常用的Excel多条件查找函数及其使用方法的详细攻略。 1. VLOOKUP函数 VLOOKUP函数用于在垂直数据表中查找某个值,并返回该值所在行的指定列的值。它的基本语法如下: VLOOKUP(lookup_…

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