JavaScript 继承详解(五)

JavaScript 继承是面向对象编程中常见的概念,本篇文章主要介绍了以下五种继承方式:原型继承、借用构造函数继承、组合继承、寄生组合式继承、class继承。

原型继承

原型继承是指通过 prototype 对象的原型链进行继承。子类的 prototype 原型链指向了父类的实例,从而实现继承。示例如下:

function Parent() {
  this.name = 'parent'
}

Parent.prototype.say = function() {
  console.log('hello')
}

function Child() {}

Child.prototype = new Parent()
Child.prototype.constructor = Child

let child = new Child()
console.log(child.name) // parent
child.say() // hello

借用构造函数继承

借用构造函数继承指通过 callapply 方法来调用父类构造函数,从而继承父类属性。示例如下:

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

function Child() {
  Parent.call(this)
}

let child1 = new Child()
let child2 = new Child()
child1.play.push(4)
console.log(child1.play) // [1, 2, 3, 4]
console.log(child2.play) // [1, 2, 3]

组合继承

组合继承是综合原型继承和借用构造函数继承的方式。它先通过 callapply 方法继承父类属性,再通过将父类实例作为子类原型的方式来继承方法。示例如下:

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

Parent.prototype.sayName = function() {
  console.log(this.name)
}

function Child(name, age) {
  Parent.call(this, name)
  this.age = age
}

Child.prototype = new Parent()
Child.prototype.constructor = Child

let child1 = new Child('kevin', '18')
let child2 = new Child('daisy', '20')

child1.play.push(4)
console.log(child1.play) // [1, 2, 3, 4]
console.log(child2.play) // [1, 2, 3]

child1.sayName() // kevin
child2.sayName() // daisy

寄生组合式继承

寄生组合式继承是组合继承的优化,它通过 Object.create 方法来优化了原型继承的方式,从而减少了调用父类构造函数的次数。示例如下:

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

Parent.prototype.sayName = function() {
  console.log(this.name)
}

function Child(name, age) {
  Parent.call(this, name)
  this.age = age
}

Child.prototype = Object.create(Parent.prototype)
Child.prototype.constructor = Child

let child1 = new Child('kevin', '18')
let child2 = new Child('daisy', '20')

child1.play.push(4)
console.log(child1.play) // [1, 2, 3, 4]
console.log(child2.play) // [1, 2, 3]

child1.sayName() // kevin
child2.sayName() // daisy

class继承

class继承是ES6中新增的继承方法,通过 classextends 定义父子类, super 关键字来代替 call 方法实现父类属性的继承。示例如下:

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

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

class Child extends Parent {
  constructor(name, age) {
    super(name)
    this.age = age
  }
}

let child1 = new Child('kevin', '18')
let child2 = new Child('daisy', '20')

child1.play.push(4)
console.log(child1.play) // [1, 2, 3, 4]
console.log(child2.play) // [1, 2, 3]

child1.sayName() // kevin
child2.sayName() // daisy

以上就是关于JavaScript 继承的五种方式的详细介绍,在实际应用中可以根据具体情况选择不同的继承方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript 继承详解(五) - Python技术站

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

相关文章

  • knockoutjs快速入门(经典)

    KnockoutJS快速入门(经典) KnockoutJS是一款流行的JavaScript框架,用于构建动态的Web应用程序。它采用MVVM(Model-View-ViewModel)模式,可以将数据模型和视图分离,使得开发员可以更加专注于业务逻辑的实现。本文将介绍KnockoutJS的快速入门,包括如何创建ViewModel、如何绑定数据和如何处理用户交互…

    other 2023年5月9日
    00
  • 关于php:访问http://localhost/phpmyadmin/页面时被拒

    以下是关于“关于php:访问http://localhost/phpmyadmin/页面时被拒”的完整攻略,包含两个示例说明。 访问http://localhost/phpmyadmin/页面被拒 在PHP中,当尝试访问http:///phpmyadmin/页面时,有时会遇到被拒绝的情况。这可能由于多种原因引起的,例如Apache服务器配置错误、PHPMyA…

    other 2023年5月9日
    00
  • Python3简单的输入输出及内置函数查看SqlServer2012自增列值突然增大1000的原因及解决方法

    我将为您提供 Python3 简单的输入输出及内置函数查看 SqlServer2012 自增列值突然增大 1000 的原因及解决方案的完整攻略,包括 Python3 的输入输出、内置函数的使用、Sql Server 2012 自增列值突然增大 1000 的原因和解决方案,同时提供两个示例说明。 Python3 简单的输入输出 Python3 中,可以使用 i…

    other 2023年5月5日
    00
  • 网吧双网互联互通无需切换解决方案

    网吧双网互联互通无需切换解决方案攻略 简介 在网吧中,通常会同时提供有线和无线两种联网方式,这为用户带来了更多的选择,也提高了上网的便利性。然而,由于有线和无线两种方式存在互不连通的问题,用户在使用时需要不断切换网络,并且常常遇到网络连接不稳定、断断续续的问题,影响用户体验。 为了解决这个问题,可以采取双网互联互通的解决方案。这种方式可以让有线和无线两种网络…

    other 2023年6月26日
    00
  • 魔兽世界7.3.5奶僧怎么堆属性 wow7.35奶僧配装属性优先级攻略

    魔兽世界7.3.5奶僧怎么堆属性攻略 1. 总体思路 奶僧的属性堆放主要分为两个部分:生存能力和治疗强度,其中生存能力包括吸收和承受伤害能力,治疗强度就是输出治疗的效果。 2. 属性优先级 2.1 生存能力属性 全能 精通 躲闪 暴击 2.2 治疗强度属性 精通 暴击 急速 全能 3. 装备选择 3.1 护甲 头、肩、胸、手、腰、腿、脚,属性优先级依次为:全…

    other 2023年6月27日
    00
  • 64位下无法运行32位程序的解决方法 提示未指定提供程序,也没有指派的默认提供程序

    64位下无法运行32位程序的解决方法 在64位操作系统下,有时候会遇到无法运行32位程序的问题。这通常是因为缺少32位程序所需的运行环境或者配置不正确。下面是解决这个问题的完整攻略。 步骤一:安装32位运行环境 首先,你需要安装32位运行环境,以便能够在64位操作系统上运行32位程序。具体的步骤如下: 打开控制面板,点击\”程序\”或\”程序和功能\”。 在…

    other 2023年7月28日
    00
  • linux sort多字段排序实例解析

    linux sort多字段排序实例解析 在 Linux 系统中,sort 命令是一个非常常用的命令之一。通过 sort 命令,我们可以按照指定的字段进行排序,也可以排序多个字段。本文会解析 sort 命令多字段排序的实例,帮助大家更好地理解该命令的使用方法。 命令格式 sort 命令的基本格式如下所示: sort [OPTION]… [FILE]… …

    other 2023年6月25日
    00
  • jQuery密码强度验证控件使用详解

    jQuery密码强度验证控件使用详解 介绍 jQuery密码强度验证控件是一个用于实时检测密码强(安全)度的工具,它支持自定义安全等级,自定义强度条样式等。该控件简单易用,轻量级高效,易于开发者快速上手并集成到自己的项目中。 安装 jQuery密码强度验证控件可通过npm安装,命令如下: npm install jquery.password_strengt…

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