JS高级ES6的6种继承方式

下面是JS高级ES6的6种继承方式的详细攻略。

1. 经典继承(原型链继承)

原理:

子类的原型为父类的一个实例,通过设置子类的原型链,使子类可以访问父类的属性和方法,也就实现了继承。

示例:

// 父类
function Animal(name) {
  this.name = name;
  this.sayName = function() {
    console.log(this.name);
  }
}

// 子类
function Dog(name) {
  this.bark = function() {
    console.log('Woof!');
  }
  Animal.call(this, name);
}

Dog.prototype = new Animal();

// 实例化子类
const puppy = new Dog('Puppy');

puppy.sayName(); // 输出:Puppy
puppy.bark(); // 输出:Woof!

2. 构造函数继承

原理:

通过在子类构造函数中调用父类构造函数,以达到继承父类属性和方法的目的。

示例:

// 父类
function Animal(name) {
  this.name = name;
  this.sayName = function() {
    console.log(this.name);
  }
}

// 子类
function Dog(name) {
  Animal.call(this, name);
  this.bark = function() {
    console.log('Woof!');
  }
}

// 实例化子类
const puppy = new Dog('Puppy');

puppy.sayName(); // 输出:Puppy
puppy.bark(); // 输出:Woof!

3. 组合继承(原型链继承和构造函数继承结合)

原理:

先使用原型链继承父类的属性和方法,再通过构造函数继承父类的属性和方法,从而既继承了父类的属性和方法,又避免了子类实例修改父类属性或方法造成的影响。

示例:

// 父类
function Animal(name) {
  this.name = name;
  this.sayName = function() {
    console.log(this.name);
  }
}

// 子类
function Dog(name) {
  Animal.call(this, name);
  this.bark = function() {
    console.log('Woof!');
  }
}

Dog.prototype = new Animal();

// 实例化子类
const puppy = new Dog('Puppy');

puppy.sayName(); // 输出:Puppy
puppy.bark(); // 输出:Woof!

4. 原型式继承

原理:

以一个对象为原型创建一个子对象,通过使用Object.create实现原型式继承。

示例:

// 父对象
const Animal = {
  name: '',
  sayName() {
    console.log(this.name);
  }
}

// 子对象
const Dog = Object.create(Animal);
Dog.bark = function() {
  console.log('Woof!');
}

// 实例化子对象
const puppy = Object.create(Dog);
puppy.name = 'Puppy';

puppy.sayName(); // 输出:Puppy
puppy.bark(); // 输出:Woof!

5. 寄生式继承

原理:

与原型式继承类似,不同在于寄生式继承在创建的新对象上增加新的方法,而不是在原型上增加。

示例:

// 父对象
const Animal = {
  name: '',
  sayName() {
    console.log(this.name);
  }
}

// 子对象
function Dog(name) {
  const dog = Object.create(Animal);
  dog.bark = function() {
    console.log('Woof!');
  }
  dog.name = name;
  return dog;
}

// 实例化子对象
const puppy = Dog('Puppy');

puppy.sayName(); // 输出:Puppy
puppy.bark(); // 输出:Woof!

6. 寄生组合式继承(ES6改进版组合继承)

原理:

以函数封装组合继承,通过ES6中的class和extends语法糖实现,从而避免了构造函数多次调用父类的问题。

示例:

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

  sayName() {
    console.log(this.name);
  }
}

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

  bark() {
    console.log('Woof!');
  }
}

// 实例化子类
const puppy = new Dog('Puppy');

puppy.sayName(); // 输出:Puppy
puppy.bark(); // 输出:Woof!

以上就是JS高级ES6的6种继承方式的完整攻略,希望能够对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JS高级ES6的6种继承方式 - Python技术站

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

相关文章

  • Gradle的安装和环境变量的配置详解

    一、Gradle的安装 下载Gradle 访问Gradle的官网(https://gradle.org/releases/),在页面上找到“Binary-only downloads”,选择最新版本的Gradle二进制文件下载即可。 解压Gradle 下载完成后解压Gradle,将解压出的文件夹放到某个位置,比如说放在 /usr/local/gradle目录…

    other 2023年6月27日
    00
  • MySql字符串拆分实现split功能(字段分割转列)

    MySql字符串拆分实现split功能(字段分割转列) 在 MySql 中,没有类似 Python 中的 split 函数,可以方便地将字符串分割,但可以用以下方法实现类似 split 的功能,即将字符串拆分并分成多个字段。 步骤 创建一个数字表,用于生成序列号,数字表的个数可以根据要拆分字符串的最大长度来决定。 mysql CREATE TABLE seq…

    other 2023年6月25日
    00
  • C++利用递归实现走迷宫

    好的! C++利用递归实现走迷宫 思路概述 递归算法的核心思想是将大问题转化为小问题求解,直到问题的规模缩小到足够小,可以直接解决。对于迷宫问题,我们可以将其看作从起点到终点的路径查找问题。每一步的决策只有两个方向:向上或向右走。因此,我们可以使用递归算法来尝试从起点开始尝试一步一步地走,看看是否能够到达终点。 具体实现 首先,我们需要定义一个迷宫的二维数组…

    other 2023年6月27日
    00
  • 使用springBoot项目配置文件位置调整到打包外

    下面我将为您详细讲解如何将Spring Boot项目的配置文件位置调整到打包外。 配置文件位置 在Spring Boot项目中,通常需要使用到application.properties或者application.yml等配置文件。如果直接将配置文件放在src/main/resources目录下,那么在打包时,配置文件将会被打包在jar或者war包中,无法直…

    other 2023年6月25日
    00
  • Go语言中map使用和并发安全详解

    Go语言中map使用和并发安全详解 概述 在Go语言中,map是一种集合类型,它可以关联一个键和一个值。map是一种引用类型,可以使用 make 函数来创建。map 的底层实现是 hash 表,因此 map 的键是无序的,但是在迭代过程中,Go语言会自动对其进行排序。 map 的基本使用方法是:使用键访问值,如果键不存在,则会返回初始值。map 与 slic…

    other 2023年6月26日
    00
  • 使用“aptsearch”和“aptshow”命令在ubuntu中搜索

    当我们在Ubuntu中需要搜索软件包时,可以使用“aptsearch”和“aptshow”命令。以下是详细步骤: 使用“aptsearch”命令搜索软件包 打开终端并输入以下命令: sudo apt update 这将更新软件列表。 使用以下命令搜索软件包: apt search package-name 其中“package-name”是我们要搜索的软件包…

    other 2023年5月7日
    00
  • echarts移动端中例子总结。

    echarts移动端中例子总结 Echarts 是一个强大的数据可视化工具,它采用了很多现代化的技术与框架。在移动端方面,Echarts同样有众多实用的例子,可以帮助我们根据不同的需求来快速构建符合各种需求的图表。 移动端echarts使用的优点 在移动端使用 Echarts,可以带来许多好处: 移动端的宽度远远小于笔记本电脑或台式电脑的宽度,这意味着我们必…

    其他 2023年3月29日
    00
  • Java中类的加载顺序执行结果

    Java中类的加载顺序执行结果在类的实例化时非常重要,正确的理解和使用可以避免程序出现各种问题。以下是完整的攻略: 类的加载过程 首先,当程序需要使用某个类时,Java虚拟机会首先在内存中查找该类是否已经被加载(被其他类引用时可能已经被加载),如果没有被加载则开始类的加载过程。 类的加载过程分为以下几个步骤: 加载:虚拟机通过ClassLoader类加载器读…

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