JavaScript常见继承模式实例小结

yizhihongxing

下面是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日

相关文章

  • 使用delphi 10.2 开发linux 上的webservice

    使用Delphi 10.2在Linux上开发WebService 随着云计算和分布式系统的兴起,Web服务已经成为了重要的技术之一。在Delphi 10.2中开发Linux上的WebService可以为我们带来许多便利,本文将介绍使用Delphi 10.2开发Linux上的WebService的基本流程。 准备工作 在开始之前,我们需要确保我们已经正确安装了…

    其他 2023年3月28日
    00
  • .NET Core读取配置文件方式详细总结

    . 配置文件格式 在 .NET Core 应用程序中,最常用的配置文件格式是 JSON(JavaScript Object Notation)格式,可以通过 Newtonsoft.Json 这个 NuGet 包来实现。 在配置文件中,可以定义一些固定的属性,如连接字符串、应用程序的端口号、账号和密码等。 JSON 配置文件通常是通过键-值对存储的,如下所示:…

    other 2023年6月25日
    00
  • Spring boot配置文件加解密详解

    Spring Boot 配置文件加解密详解 在实际开发过程中,我们通常需要在配置文件中包含敏感信息(如:数据库用户名,密码等),但是为了避免这些敏感信息泄露,我们需要对这些信息进行加密保护。相信很多小伙伴都遇到过这样的问题,那么本文将为大家详细讲解如何在 Spring Boot 中使用 jasypt 对配置文件进行加解密,让大家轻松解决这一问题。 1. 添加…

    other 2023年6月25日
    00
  • c#控件之combobox控件使用

    以下是详细讲解“C#控件之ComboBox控件使用的完整攻略,过程中至少包含两条示例说明”的标准Markdown格式文本: 控件之ComboBox控件使用的完整攻略 ComboBox控件是C#中常用的下拉列表控件,可以用于显示一组选并允许用户从中选择一个或多个选项。本攻略将介绍ComboBox控件的基本用法和常见属性,包括数据绑定、事件处理、样式设置等。同时…

    other 2023年5月10日
    00
  • C++ COM编程之接口背后的虚函数表

    C++ COM编程之接口背后的虚函数表 什么是虚函数表? 虚函数表(Virtual Function Table,简称 vtable)是 C++ 语言中实现动态多态(Runtime Polymorphism)的机制之一。每个类在其对象之中都有一个虚函数表,用于实现在多态情况下的函数调用。 什么是COM接口? Component Object Model(简称…

    other 2023年6月26日
    00
  • 微信小程序页面生命周期详解

    微信小程序页面生命周期详解 微信小程序是一种轻量级的应用程序,由于其小巧灵活,短时间内便可开始运作等特点,越来越受开发人员喜爱。在开发小程序页面时,了解各个生命周期函数的调用顺序和作用,对于开发高质量的小程序至关重要。 页面生命周期函数介绍 以下是微信小程序页面的生命周期函数: 生命周期函数 触发时间 作用 onLoad 页面加载时 在页面被展示前,执行页面…

    other 2023年6月27日
    00
  • C# TSC打印二维码和条形码的实现方法

    C# TSC打印二维码和条形码的实现方法 在C# TSC打印中,二维码和条形码的打印是非常常见的操作。本文将介绍如何使用C# TSC实现二维码和条形码的打印。 TSC打印机介绍 TSC打印机是一款专业的条码打印机,适用于各种规格的标签纸,支持多种打印技术,能够在各种应用场景中高效稳定地打印标签。 打印二维码 在C# TSC中,打印二维码的方法是使用指令^BQ…

    other 2023年6月26日
    00
  • Android仿QQ微信侧滑删除效果

    Android仿QQ微信侧滑删除效果攻略 简介 在本攻略中,我们将详细讲解如何实现Android仿QQ微信侧滑删除效果。这种效果允许用户通过在列表项上进行滑动操作来删除该项。 步骤 步骤一:添加依赖库 首先,我们需要在项目的build.gradle文件中添加以下依赖库: dependencies { implementation ‘com.android.s…

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