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日

相关文章

  • C语言深入详解四大内存函数的使用

    C语言深入详解四大内存函数的使用攻略 1. malloc函数 malloc函数用于在堆内存中动态分配指定大小的内存空间,并返回一个指向该内存空间的指针。其函数原型如下: void* malloc(size_t size); 使用示例: #include <stdio.h> #include <stdlib.h> int main() …

    other 2023年8月2日
    00
  • 设置Win10文件资源管理器默认打开“这台电脑”

    下面是“设置Win10文件资源管理器默认打开“这台电脑”的完整攻略”,包括基本原理、实现方法和两个示例说明。 基本原理 在 Windows 10 中,文件资源管理器默认打开的位置是“快速访问”窗格。如果您想将其更改为“这台电脑”,可以按照以下步骤进行操作: 打开文件资源管理器。 在左侧导航栏中选择“这台电脑”。 单击“文件”选项卡,然后单击“更改文件和文件夹…

    other 2023年5月5日
    00
  • ASP.NET 应用程序级 验证用户是否登录 一般处理程序

    ASP.NET提供了多种方式来验证用户是否登录,其中应用程序级别的验证是通过在Global.asax中的Session_Start事件处理程序来实现的。下面是一般处理程序实现应用程序级别验证的具体步骤: 打开Visual Studio创建一个新的Web应用程序 添加一个一般处理程序(.ashx文件),命名为CustomHandler。此处理程序将提供验证用户…

    other 2023年6月25日
    00
  • Python实现账号密码输错三次即锁定功能简单示例

    实现账号密码输错三次即锁定功能,可以使用Python中的数据结构和流程控制语句来完成。具体实现步骤如下: 1. 定义一个字典来存储账号和对应的密码 users = {‘Tom’:’123′, ‘Jerry’:’456′, ‘Bob’:’789′} 2. 循环询问用户输入账号和密码,并进行校验 使用while循环可以反复循环询问用户的账号和密码。使用if语句和…

    other 2023年6月27日
    00
  • Jquery 在页面加载后执行的几种方式

    Jquery 在页面加载后执行有多种方式,下面详细说明一下这些方式: 监听$(document).ready() Jquery 提供了一个监听 DOM 加载完成的事件,可以使用$(document).ready()方法来处理这个事件。代码示例如下: $(document).ready(function() { // 在这里写需要执行的代码 }); 这个方法的…

    other 2023年6月25日
    00
  • HTML5中5个简单实用的API(第二篇,含全屏、可见性、拍照、预加载、电池状态)

    下面是一份详细的攻略,讲解HTML5中5个简单实用的API: HTML5中5个简单实用的API HTML5提供了很多有用的API,这里我们介绍5个简单实用的API,包括全屏、可见性、拍照、预加载和电池状态。 全屏API 使用全屏API,可以实现将Web页面以全屏模式下展示,给用户带来更好的阅读和游戏体验。全屏API支持所有Web浏览器,并且使用方法非常简单。…

    other 2023年6月25日
    00
  • ThinkPHP之import方法实例详解

    ThinkPHP之import方法实例详解攻略 ThinkPHP是一个开源的PHP开发框架,提供了丰富的功能和工具来简化PHP应用程序的开发过程。其中,import方法是ThinkPHP框架中的一个重要函数,用于导入类库文件和命名空间。 1. import方法的基本语法 import($class, $baseUrl = ”, $ext = EXT); $…

    other 2023年8月6日
    00
  • mshta命令用法示例

    标题: mshta命令用法示例 简介 MSHTA 命令是微软 Windows 操作系统中的一个命令行工具,用于执行基于 HTML 和脚本的应用程序。 这个工具可以用于执行本地 HTML 文件、Web 页面、以及执行 ActiveX 控件等。本文将具体阐述 mshta 命令的用法,以及两种不同的示例操作。 语法 mshta [HTA 文件名 | URL | -…

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