JavaScript 继承详解(五)

yizhihongxing

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日

相关文章

  • ios9/iPhone6s/6s plus未受信任的企业级开发者怎么解决?

    问题描述: 在iOS9及以上版本中,如果企业开发者使用自己的证书为自己开发的应用签名并分发给内部员工或外部用户,可能会遇到受信任的问题,从而无法安装应用。 解决方法: 要解决这个问题,需要以下步骤: 在企业级开发者后台重新生成并下载最新的证书和描述文件,并确保它们与应用匹配。 在企业级开发者后台中创建一个.plist文件,用于安装描述文件时安装iOS应用程序…

    other 2023年6月26日
    00
  • Win10预览版17758怎么手动升级到17763版?

    下面是详细的步骤: 准备工作 在升级之前,请确保做好了以下几个准备工作: 确保你的电脑已经安装了Win10预览版17758。 确保你的电脑连接到了互联网,并且网络连接顺畅。 确保你的电脑没有其他的升级任务在进行中,比如正在下载其他的更新包。 确保你已经备份了重要的数据,以防数据丢失或者数据泄露。 使用Windows Update手动升级 打开开始菜单,点击“…

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

    魔兽世界7.3.5狂徒贼属性堆叠攻略 1. 介绍 狂徒贼在魔兽世界中是一个高爆发的近战职业,通过快速连击和毒药造成大量伤害。在7.3.5版本中,属性堆叠是提高狂徒贼输出的关键之一。本攻略将详细讲解如何堆叠属性以及属性的优先级。 2. 属性优先级 属性的优先级决定了在配装过程中应该优先考虑哪些属性。下面是狂徒贼属性的优先级从高到低的排序: 爆击:提高你的技能触…

    other 2023年6月28日
    00
  • 关于java关键字this和super的区别和理解

    一、关于this关键字的区别和理解 this是指当前对象的引用,可以用于调用类中的构造器、实例变量、实例方法和其他实例。在方法中,如果一个形参变量与实例变量同名,可以用this关键字来区分这两个变量。此外,在使用链式调用时,通过返回当前对象的引用(即this),可以实现链式调用方法。 调用类中的构造器 在一个类中,如果有多个构造器,可以通过this来调用其他…

    other 2023年6月26日
    00
  • verilog语言设计三段式状态机

    Verilog语言设计三段式状态机 在Verilog语言中,状态机是一种常见的设计模式,用于描述系统的状态和状态之间的转换。三段式状态机是一种常见的状态机设计模式,它将状态机分为三个部分:状态寄存器、组合逻辑和输出寄存器。本文将对三段式状态机进行详细的分析,并提供两个示例说明。 三段式状态机的组成部分 三段式状态机由三个部分组成:状态寄存器、组合逻辑和输出寄…

    other 2023年5月9日
    00
  • “服务器推”技术【转载+整理】

    服务器推技术【转载+整理】 服务器推技术是指通过服务器主动向客户端推送数据的技术,也被称为“服务器推送”或“推送服务”。这一技术在现代web应用开发中被广泛使用,特别适用于需要实时更新数据的场景,比如社交网络、股票市场等。 前置知识 在学习服务器推技术之前,你需要掌握以下技术: HTTP 协议:服务器推技术的核心是“长连接”,需要使用 HTTP 协议的“ke…

    其他 2023年3月29日
    00
  • oracleexadata体系笔记

    Oracle Exadata体系笔记 Oracle Exadata是Oracle公司推出的一款专用于数据处理的高性能、高可靠性的数据库机。它结合了Oracle数据库软件与硬件的优势,采用了多种特殊的硬件和软件优化,以提供极高的性能、可靠性和扩展性。 Exadata体系结构 Exadata机器的核心是存储服务器和计算服务器,它们通过Infiniband高速网络…

    其他 2023年3月28日
    00
  • 如何一键取消ppt动画效果一键取消ppt动画效果的方法

    以下是关于“如何一键取消PPT动画效果”的完整攻略,包括基本概念、解决方法、示例说明和注意事项。 基本概念 PPT动效果是指在PPT中添加的各种动画效果,如淡入淡出、飞入飞出、旋转等。这些动画效果可以使PPT更加生动、有趣,但有时也会影响PPT的展示效果。因此,有时需要一键取消PPT动画效果。 解决方法 以下是一键取消PPT动画效果的方法: 打开PPT 打开…

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