JavaScript常见继承模式实例小结

下面是JavaScript常见继承模式实例小结的完整攻略。

常见继承模式实例小结

在JavaScript中实现继承有多种方法,下面将会介绍常见的几种方法,并通过示例说明。

1. 原型链继承

原型链继承是JavaScript中最常见的继承模式,它的实现方法如下:

function Animal (name) {
  this.name = name
}

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

function Dog (name) {
  this.type = 'dog'
}

Dog.prototype = new Animal()

var dog1 = new Dog('小黄')
dog1.sayName() // 小黄

上述代码中创建了一个Animal构造函数,并在Animal的原型中添加了sayName方法。接着创建了一个Dog构造函数,并将Dog的原型指向了Animal的实例。这样,Dog的实例就能够继承Animal的属性和方法。

2. 借用构造函数继承

借用构造函数继承也是一种常见的继承模式,它的实现方法如下:

function Animal (name) {
  this.name = name
}

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

function Dog (name) {
  Animal.call(this, name)
  this.type = 'dog'
}

var dog1 = new Dog('小黄')
dog1.sayName() // TypeError: dog1.sayName is not a function

上述代码中创建了一个Animal构造函数,并在Animal的原型中添加了sayName方法。接着创建了一个Dog构造函数,在Dog构造函数中通过call方法将this指向Animal,并且将name作为参数传入。这样,Dog的实例就能够继承Animal的属性,但无法继承Animal的方法。

3. 组合继承

组合继承是上述两种继承模式的结合体,它的实现方法如下:

function Animal (name) {
  this.name = name
}

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

function Dog (name) {
  Animal.call(this, name)
  this.type = 'dog'
}

Dog.prototype = new Animal()
Dog.prototype.constructor = Dog

var dog1 = new Dog('小黄')
dog1.sayName() // 小黄

上述代码中创建了一个Animal构造函数,并在Animal的原型中添加了sayName方法。接着创建了一个Dog构造函数,在Dog构造函数中通过call方法将this指向Animal,并且将name作为参数传入。然后将Dog的原型指向Animal的实例,并将Dog的原型的constructor属性指向Dog。这样,Dog的实例既能够继承Animal的属性,也能继承Animal的方法。

4. 原型式继承

原型式继承是通过一个对象创建另一个对象,它的实现方法如下:

var animal = {
  name: '动物',
  sayName: function () {
    console.log(this.name)
  }
}

var dog1 = Object.create(animal)
dog1.type = 'dog'

dog1.sayName() // 动物

上述代码中创建了一个animal对象,并在animal对象中添加了name属性和sayName方法。接着通过Object.create方法,将dog1对象的原型指向animal对象,然后在dog1对象中添加了type属性。这样,dog1对象就能够继承animal对象的属性和方法。

5. 寄生式继承

寄生式继承是在原型式继承的基础上添加一些新的属性或方法,它的实现方法如下:

var animal = {
  name: '动物',
  sayName: function () {
    console.log(this.name)
  }
}

function createDog (name) {
  var dog = Object.create(animal)
  dog.type = 'dog'
  dog.sayType = function () {
    console.log(this.type)
  }
  return dog
}

var dog1 = createDog('小黄')
dog1.sayName() // 动物
dog1.sayType() // dog

上述代码中创建了一个animal对象,并在animal对象中添加了name属性和sayName方法。接着创建了一个createDog函数,在createDog函数中通过Object.create方法将dog对象的原型指向animal对象,并在dog对象中添加了type属性和sayType方法。最后返回dog对象,这样,dog对象就能够继承animal对象的属性和方法,并添加新的属性和方法。

6. 寄生组合式继承

寄生组合式继承是在组合继承的基础上,使用Object.create方法来使Animal的实例作为Dog的原型,避免了组合继承中创建两次Animal实例的问题。它的实现方法如下:

function Animal (name) {
  this.name = name
}

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

function Dog (name) {
  Animal.call(this, name)
  this.type = 'dog'
}

Dog.prototype = Object.create(Animal.prototype)
Dog.prototype.constructor = Dog

var dog1 = new Dog('小黄')
dog1.sayName() // 小黄

上述代码中创建了一个Animal构造函数,并在Animal的原型中添加了sayName方法。接着创建了一个Dog构造函数,在Dog构造函数中通过call方法将this指向Animal,并且将name作为参数传入。然后将Dog的原型指向Animal的原型通过Object.create方法,避免了组合继承中创建两次Animal实例的问题,最后将Dog的原型的constructor属性指向Dog。这样,Dog的实例既能够继承Animal的属性,也能继承Animal的方法。

这就是JavaScript常见继承模式实例的小结。它们各有优缺点,针对不同的场景,选择不同的继承模式能够更好的解决问题。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript常见继承模式实例小结 - Python技术站

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

相关文章

  • 荒野大镖客2为什么闪退 闪退问题原因及解决办法

    荒野大镖客2为什么闪退 – 问题原因及解决办法 荒野大镖客2是一款备受玩家喜爱的大型开放世界游戏。然而,一些玩家在游戏过程中会遇到闪退的问题,这给游戏体验带来了不便。本文将详细讲解荒野大镖客2闪退的问题原因及解决办法。 问题原因 荒野大镖客2闪退的原因可能包括但不限于以下几点: 1. 电脑配置不足 如果你的电脑配置不足,可能无法流畅地运行荒野大镖客2,导致游…

    other 2023年6月27日
    00
  • vue报表开发

    Vue报表开发 随着互联网的发展,数据分析和数据可视化变得愈发重要,作为前端开发者,我们需要快速、高效地开发出精美的报表界面来满足用户需求。Vue作为一款优秀的前端框架,具有极高的灵活性和扩展性,这使得它成为开发报表的最佳选择。 Vue报表框架推荐 市面上出现了很多优秀的Vue报表框架,例如: ECharts AntV G2 BizCharts 以上三种报表…

    其他 2023年3月29日
    00
  • PHP设计模式(八)装饰器模式Decorator实例详解【结构型】

    下面是针对“PHP设计模式(八)装饰器模式Decorator实例详解【结构型】”文章的完整攻略。 1. 什么是装饰器模式Decorator? 装饰器模式(Decorator)是一种结构型设计模式,它允许你动态地将对象添加到现有对象中。使用装饰器模式,可以将一个或多个装饰器包装在对象上,从而改变其行为。当需要动态地将对象添加到现有对象中或从对象中删除对象时,可…

    other 2023年6月26日
    00
  • 盘点6款实用的文件对比工具 你都用过吗?

    以下是关于“盘点6款实用的文件对比工具你都用过吗?”的完整攻略,包括基本知识和两个示例说明。 基本知识 文件对比工具是一种用于比较个或多个文件之差异的软件。文件对比工具可以帮助用户找到文件之间的差异,包括文本、二制、图像等文件类型。常见的文件对比工具包括WinMerge、Beyond Compare、DiffMerge等。 以下是6款实用的文件对比工具: W…

    other 2023年5月7日
    00
  • Mysql InnoDB 的内存结构详情

    Mysql InnoDB 的内存结构详情攻略 MySQL InnoDB 是一种常用的关系型数据库管理系统,它使用了一种称为 InnoDB 存储引擎的技术来管理数据。InnoDB 存储引擎使用了一套复杂的内存结构来提高性能和数据的一致性。下面是关于 InnoDB 内存结构的详细攻略。 1. 缓冲池(Buffer Pool) 缓冲池是 InnoDB 存储引擎最重…

    other 2023年8月2日
    00
  • 缺氧植物不生长解决攻略

    缺氧植物不生长解决攻略 什么是缺氧 缺氧是指植物根部由于土壤过湿、排水不良等原因,根系不能顺利呼吸气体,导致根系缺氧的情况。缺氧严重时,会使植物无法吸收水分养分,造成植物生长缓慢、黄叶发干等问题。 如何解决缺氧问题 改善排水条件 排水不良是导致缺氧的主要原因之一,因此,必须改善排水条件。可以通过以下方式来达到改善排水的目的:将植物种在排水良好的土壤中;在盆栽…

    other 2023年6月27日
    00
  • Win10注册表添加右键跳转功能以便编辑注册表

    当我们需要频繁编辑Windows操作系统的注册表时,可以将编辑注册表的功能添加到右键菜单中来提高效率。下面是添加“编辑注册表”右键菜单的完整攻略。 步骤一:打开注册表编辑器 在Windows系统中,按下WIN+R组合键打开运行界面,输入regedit并回车即可打开注册表编辑器。 步骤二:创建快捷方式 在注册表编辑器中,依次展开以下路径: HKEY_CLASS…

    other 2023年6月27日
    00
  • win7系统打开IE浏览器提示“禁用的加载项,网页内容无法显示”的故障分析及解决方法

    故障分析 当我们在win7系统中打开IE浏览器时,有时会弹出一个警告提示框,提示“禁用的加载项,网页内容无法显示”。这是由于IE浏览器安装的某些插件或者加载项与当前浏览的网页不兼容或存在安全隐患,因此浏览器自动禁用了这些插件或加载项,导致网页内容无法正常显示。 解决这个问题的方法是,找到导致问题的插件或加载项,并进行禁用或卸载。通常情况下,这些插件或加载项是…

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