Javascript的ES5,ES6的7种继承详解

yizhihongxing

Javascript的ES5、ES6的7种继承详解

Javascript是一种面向对象的语言,继承是面向对象编程中的重要概念。ES5和ES6是Javascript中的两个版本,都提供了不同的继承方式。本攻略将介绍Javascript中ES5和ES6的7种继承方式。

1. 原型链继承

原型链继承是Javascript中最基本、最常用的继承方式。通过将父类的实例作为子类的原型,实现子类对父类成员变量和方法的继承。

实现示例

function Parent() {
    this.name = 'parent';
    this.play = [1, 2, 3];
}

function Child() {
    this.type = 'child';
}

Child.prototype = new Parent();

2. 构造函数继承

构造函数继承是通过在子类的构造函数中调用父类构造函数,实现对父类成员变量和方法的继承。

实现示例

function Parent() {
    this.name = 'parent';
    this.play = [1, 2, 3];
}

function Child() {
    Parent.call(this);
    this.type = 'child';
}

3. 组合继承

组合继承是将原型链继承和构造函数继承结合起来使用,实现继承。

实现示例

function Parent() {
    this.name = 'parent';
    this.play = [1, 2, 3];
}

function Child() {
    Parent.call(this);
    this.type = 'child';
}

Child.prototype = new Parent();

4. 原型式继承

原型式继承是使用一个中间对象作为父类实例的原型,实现对父类成员变量和方法的继承。

实现示例

function createObj(o) {
    function F() {}
    F.prototype = o;
    return new F();
}

var parent = {
    name: 'parent',
    play: [1, 2, 3]
};

var child = createObj(parent);
child.type = 'child';

5. 寄生式继承

寄生式继承是在原型式继承的基础上,对中间对象进行扩展从而使其具有更多的功能。

实现示例

function createObj(o) {
    function F() {}
    F.prototype = o;
    return new F();
}

function createChild(parent) {
    var child = createObj(parent);
    child.type = 'child';
    return child;
}

var parent = {
    name: 'parent',
    play: [1, 2, 3]
};

var child = createChild(parent);

6. 寄生组合式继承

寄生组合继承是在组合继承的基础上,将父类的原型赋值给中间对象,并将子类的原型指向中间对象,从而达到不重复调用父类构造函数,提高性能的效果。

实现示例

function Parent() {
    this.name = 'parent';
    this.play = [1, 2, 3];
}

function Child() {
    Parent.call(this);
    this.type = 'child';
}

(function() {
    var F = function() {};
    F.prototype = Parent.prototype;
    Child.prototype = new F();
})();

7. class继承

class继承是ES6新增的继承方式,通过使用class语法糖,实现对父类成员变量和方法的继承。

实现示例

class Parent {
    constructor() {
        this.name = 'parent';
        this.play = [1, 2, 3];
    }
}

class Child extends Parent {
    constructor() {
        super();
        this.type = 'child';
    }
}

以上就是Javascript中ES5和ES6的7种继承方式的详细讲解和示例,希望对您有所帮助。

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

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

相关文章

  • MYSQL统计逗号分隔字段元素的个数

    MYSQL统计逗号分隔字段元素的个数是一种统计操作,适用于某些数据表的字段存储了逗号分隔的多个元素,需要统计每个字段包含的元素个数。下面提供了一个完整攻略,步骤如下: 首先,需要使用SUBSTRING_INDEX函数将字段中的逗号分隔的元素分割出来,具体语法如下: SUBSTRING_INDEX(str,delim,count) 其中,str是要分割的字符串…

    other 2023年6月25日
    00
  • 条件数据库Android:sqllite的简单使用

    下面是“条件数据库Android:sqllite的简单使用”的完整攻略。 1. 前言 SQLite是一款功能强大的嵌入式关系型数据库,它被广泛应用在各个领域当中,而在Android中,SQLite是Android中的默认数据库,因此它也被广泛地应用在Android项目中。本篇文章将介绍在Android开发中如何使用SQLite数据库。 2. 实现SQLite…

    other 2023年6月26日
    00
  • 谈谈Java中自定义注解及使用场景

    接下来我将为您详细讲解Java中自定义注解及使用场景的攻略。 什么是自定义注解 Java中的注解(Annotation)是一种描述程序元素的一种标记,常用于代码的编译、运行和解析。而自定义注解,即程序员自己定义的注解类型,可以用来为代码元素添加额外的元信息,包括作者、版本、参数等信息。自定义注解需要使用Java的注解元素(Annotation Element…

    other 2023年6月25日
    00
  • NBA2K16提示0xc000007b错误的解决方法

    NBA2K16提示0xc000007b错误的解决方法 问题描述 在运行NBA2K16时,可能会出现0xc000007b错误提示,这是系统中缺少重要组件或配置不当导致的典型错误。该错误提示信息通常如下:The application was unable to start correctly (0xc000007b) 解决方法 下面介绍一些修复错误的方法,你可…

    other 2023年6月27日
    00
  • PowerShell获取系统环境变量的方法

    获取系统环境变量的方法在PowerShell中非常简单,本文将详细介绍两种获取系统环境变量的方法。 方法一:使用[Environment]::GetEnvironmentVariables()静态方法 使用[Environment]::GetEnvironmentVariables()静态方法可以获取到所有系统环境变量及其对应的值。该方法返回一个哈希表(Ha…

    other 2023年6月27日
    00
  • nvm安装方法以及安装后node不能使用解决

    NVM安装方法 NVM(Node Version Manager)是一个用于管理多个Node.js版本的工具。下面是NVM的安装方法: 打开终端(命令行界面)。 在终端中运行以下命令来下载NVM的安装脚本: curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.38.0/install.sh | b…

    other 2023年8月3日
    00
  • 详解Python循环作用域与闭包

    详解Python循环作用域与闭包 在Python中,循环作用域和闭包是两个重要的概念。循环作用域指的是在循环体内定义的变量的作用域范围,而闭包则是指函数可以访问并修改其外部作用域中的变量。本文将详细讲解这两个概念,并提供两个示例说明。 循环作用域 在Python中,循环体内定义的变量的作用域范围只在该循环体内部有效。当循环结束后,这些变量将无法在循环外部访问…

    other 2023年8月19日
    00
  • 五分钟学会HTML5的WebSocket协议

    五分钟学会HTML5的WebSocket协议 WebSocket是HTML5协议之一,用于在网络应用中进行实时双向通信。它和HTTP协议不同,可以在一条TCP连接上实现双向通信,显著提升了网络应用的性能和效率。 1. WebSocket的基础知识 1.1 WebSocket的URL格式 WebSocket的URL格式与HTTP协议基本相同,只是在http或h…

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