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日

相关文章

  • Android如何在Gradle中更改APK文件名详解

    如果你想在构建Android工程时修改APK文件名,可以通过以下方式实现: 步骤1:打开build.gradle文件 在你的Android工程目录下,打开build.gradle文件,一般有两个文件,一个是app/build.gradle,另一个是project/build.gradle。我们需要修改的是app/build.gradle文件。 步骤2:添加如…

    other 2023年6月26日
    00
  • Vue.js slot插槽的作用域插槽用法详解

    Vue.js slot插槽的作用域插槽用法详解 什么是Vue.js的插槽(slot)? 在Vue.js中,插槽(slot)是一种用于在组件中承载内容的特殊元素。它允许我们在组件的模板中定义一些占位符,然后在使用该组件时,将实际内容插入到这些占位符中。 作用域插槽的概念 作用域插槽是Vue.js中的一种特殊类型的插槽,它允许我们将数据从父组件传递到子组件的插槽…

    other 2023年8月20日
    00
  • 怎么删除IE右键的迅雷下载具体修复方法

    让我来为大家详细讲解如何删除IE右键的迅雷下载具体修复方法。 1. 了解问题原因 点击IE的右键弹出菜单,会发现其中出现了“用迅雷下载”等选项,这是由于迅雷软件安装后在注册表中添加了相关设置。如果我们需要删除这些选项,则需要通过修改注册表来实现。 2. 备份注册表 在操作之前,我们首先需要备份注册表。备份方法如下: 按下“Win+R”键,打开运行对话框。 输…

    other 2023年6月27日
    00
  • Powershell Profiles配置文件的存放位置介绍

    当进入Powershell命令行时,Powershell会自动执行一个叫做Profile的脚本。Profile可以用于配置Powershell环境初始化,比如设置环境变量、导入常见的模块等等。本篇攻略将会介绍在Windows系统中,Powershell Profile的存放位置,并且提供两个示例来演示Profile的使用。 存放位置 Powershell P…

    other 2023年6月25日
    00
  • shell将脚本输出结果记录到日志文件的实现

    当我们在编写Shell脚本的时候,常常需要记录脚本的执行结果,以便后续查看或分析。这时候,将脚本输出结果记录到日志文件中就是一个比较好的选择。下面,我们将基于Linux系统,介绍如何通过Shell脚本将输出结果记录到日志文件中。 一、创建日志文件 在记录Shell脚本执行结果之前,我们需要先创建一个记录结果的日志文件。可以通过touch命令创建一个空白日志文…

    other 2023年6月27日
    00
  • springboot项目如何在linux服务器上启动、停止脚本

    Spring Boot项目在Linux服务器上启动、停止脚本的完整攻略 以下是在Linux服务器上启动和停止Spring Boot项目的完整步骤: 启动脚本 创建一个新的Shell脚本文件,例如start.sh。 在脚本文件中添加以下内容: #!/bin/bash # 定义项目路径 PROJECT_DIR=/path/to/your/project # 进入…

    other 2023年10月13日
    00
  • Android 删除指定包名的App实例代码

    当你想要删除指定包名的Android应用程序实例时,你可以按照以下步骤进行操作: 获取应用程序包管理器(PackageManager)的实例: PackageManager packageManager = getPackageManager(); 使用包管理器获取指定包名的应用程序信息: String packageName = \"com.ex…

    other 2023年9月7日
    00
  • 苹果 iOS 15/iPadOS 15 开发者预览 Beta 推送(附描述文件下载)

    苹果 iOS 15/iPadOS 15 开发者预览 Beta 推送攻略 背景介绍 苹果公司于2021年6月7日举行的WWDC上,发布了全新的操作系统iOS 15和iPadOS 15。该版本的更新增加了众多新功能,包括FaceTime升级、新的通知系统、云服务改进等等。 目前,iOS 15和iPadOS 15已经开放给部分开发者体验,开发者可以通过官方渠道下载…

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