js几种继承

2023-05-16

提示:主要是原型链继承、构造函数继承、原型链加构造函数继承、寄生组合式继承


一、原型链继承

子类想要继承父类的属性和方法,可以将其原型对象指向父类的实例,根据原型链就可以使用到父类的方法和属性

    // 父类
    function Parent() {
      this.name = ['父类']
      this.introduce = function () {
        console.log("my name is" + this.name)
      }
    }
    // 子类
    function Child() {
      this.childname = ['子类']
    }

    // 核心代码:
    Child.prototype = new Parent()
    var child1 = new Child()
    console.log(child1)

  输出的结果:

                

 child已经继承了父类的方法,但是缺点就是多个子类实例对父类引用类型的操作会被纂改,无法保持子类实例的个性。如:

    var child1 = new Child()
    child1.name[0] = 'child1唱歌'
    var child2 = new Child()
    child2.name[0] = 'child2跳舞'
    console.log(child1.name);
    console.log(child2.name);

输出结果:

         

 child1和child2继承的父类的name属性是一个数组,对其操作时更改会互相影响。


二、构造函数继承

在子类的构造函数中,执行父类的构造函数,并且为其绑定子类的this

    // 父类
    function Parent() {
      this.name = ['父类']
      this.introduce = function () {
        console.log("父类上的introduce方法")
      }
    }
    Parent.prototype.sayhi = function () {
      console.log('父类原型上的sayhi方法');
    }
    // 子类
    function Child() {
      this.childname = ['子类']
      Parent.call(this)
    }

    var child1 = new Child()
    child1.introduce()
    child1.sayhi()

上述代码的结果是:

         

 构造函数继承可以继承到父类上的属性和方法,但是继承不到父类原型上的属性和方法


三、原型链加构造函数继承

    // 父类
    function Parent() {
      this.name = ['父类']
      this.introduce = function () {
        console.log("父类上的introduce方法")
      }
    }
    Parent.prototype.sayhi = function () {
      console.log('父类原型上的sayhi方法');
    }
    // 子类
    function Child() {
      this.childname = ['子类']
      Parent.call(this) // 第二次调用Parent
    }

    Child.prototype = new Parent() // 第一次调用Parent

    var child1 = new Child()
    console.log(child1);

输出结果:

         

 第一次调用Parent(),在Child.prototype写入了父类的name和introduce属性和方法,第二次再调用Parent(), 给实例child1又写入了name和introduce属性和方法。实例child1上的name和introduce屏蔽了原型对象Parent.prototype的两个同名属性,所以组合模式的缺点就在使用子类创建实例对象的时候,其原型中会存在两份相同的属性和方法.


 四、原型式继承

利用一个空对象作为中介、将某个对象直接赋值给空对象构造函数的原型,其实就是使用Object.create()

    var Parent = {
      name: ['父类属性'],
      sayhi: function () {
        console.log(this.name);
      }
    }

    var child1 = Object.create(Parent)
    var child2 = Object.create(Parent)
    child1.name[0] = 'child1属性'
    child2.name[0] = 'child2属性'
    console.log(child1);

缺点:跟原型链继承一样,多个子类实例的引用类型属性指向相同,可能会纂改。 


五、寄生组合式继承

     // 父类
    function Parent() {
      this.name = ['父类']
      this.introduce = function () {
        console.log("父类上的introduce方法")
      }
    }
    Parent.prototype.sayhi = function () {
      console.log('父类原型上的sayhi方法');
    }
    // 子类
    function Child() {
      this.childname = ['子类']
      Parent.call(this) // 核心代码
    }
    Child.prototype = Object.create(Parent.prototype) // 核心代码

    const child1 = new Child()
    const child2 = new Child()
    child1.name[0] = 'child1'
    child2.name[0] = 'child2'
    console.log(child1);
    console.log(child1.name);
    console.log(child2.name);

 完美解决原型链加构造函数继承的缺点

mark一下,明天接着写

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

js几种继承 的相关文章

随机推荐

  • 课设-基于51单片机的智能小车(循迹+避障+APP控制)

    51单片机课设 智能小车 一 课设任务二 硬件设计及相关传感器模块1 车模2 51单片机3 红外循迹模块4 电机及驱动5 蓝牙模块6 硬件搭建 三 程序代码1 main c文件2 motor c文件 四 我的大学 造车 史 注 xff1a
  • 课设-基于51单片机+超声波模块的避障小车(源码+原理图+Protel仿真)

    基于51单片机 43 超声波模块的避障小车 xff08 源码 43 原理图 43 Protel仿真 xff09 一 功能二 模块2 1 电机驱动模块2 2 超声波模块 三 程序代码四 PCB原理图 一 功能 设计一辆利用超声波传感器来实现避
  • 路径规划(一):使用Matlab快速绘制栅格地图

    目录 一 Matlab快速绘制栅格地图1 几种常用的地图形式 xff1a 1 1 尺度地图 xff1a 1 2 拓扑地图 xff1a 1 3 语义地图 xff1a 2 栅格地图用于路径规划的优势 xff1a 3 matlab绘制栅格地图的核
  • 2、无人驾驶--路径规划算法:Dijkstra

    目录 2 Dijkstra2 1 算法简介2 2 算法思路具体流程 xff1a 2 3 算法具体实现2 3 1 程序详解 2 Dijkstra 声明 xff1a 本文是学习古月居 基于栅格地图的机器人路径规划算法指南 黎万洪 后写的笔记 x
  • 毕设--基于51单片机的温度报警器设计

    目录 1 简介2 设计要求与方案论证2 1 设计要求2 2 系统基本方案选择和论证2 2 1 单片机芯片的选择方案和论证2 2 2 温度传感器设计方案论证 2 3 电路设计最终方案决定 3 硬件设计介绍3 1 STC89C51介绍3 1 1
  • 基于51单片机的篮球比赛计时器

    目录 基于51单片机的篮球比赛计时器1 PCB原理图2 仿真图3 毕设要求 xff1a 4 总体方案设计5 程序源码6 资源下载 基于51单片机的篮球比赛计时器 注 xff1a 本毕设资源可在微信公众号 xff1a Kevin的学习站 中获
  • 毕设--基于51单片机数字电压表的设计

    目录 基于51单片机数字电压表的设计1 PCB原理图2 Proteus 仿真图3 设计目标3 1 基本功能3 2 主要技术参数 4 总设计框图5 硬件设计分析5 1 电源的设计5 2 单片机最小系统5 3 模数转换 6 软件设计的组成7 元
  • 基于51单片机的智能温控风扇(程序+仿真+原理图)

    目录 基于51单片机的智能温控风扇1 主要功能2 实验结果3 仿真工程4 原理图5 程序源码6 资源获取 基于51单片机的智能温控风扇 1 主要功能 基于51单片机的智能温控风扇 xff0c 通过DS180温度传感器采集温度 xff0c 并
  • 基于51单片机的八路竞赛抢答器设计

    目录 基于51单片机的八路抢答器设计1 主要功能2 仿真图3 测试图4 程序源码5 资源获取 基于51单片机的八路抢答器设计 1 主要功能 利用STC89C52单片机及外围接口实现的抢答系统 xff1b 在抢答过程中 xff0c 只有启动抢
  • 赛灵思-Zynq UltraScale+ MPSoC学习笔记汇总

    Zynq UltraScale 43 MPSoC学习目录 xff1a 1 赛灵思 Zynq UltraScale 43 MPSoCs xff1a 产品简介 2 赛灵思 Zynq UltraScale 43 MPSoC学习笔记 xff1a P
  • 数据可视化--实验五:高维非空间数据可视化

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 文章目录 概要实验过程Pyecharts实验结果平行坐标系room1 6房间人员时长饼图 概要 学院 xff1a 计算机科学与技术
  • 7、AUTOSAR MCAL入门-实战:I/O驱动组

    7 AUTOSAR MCAL入门 实战 xff1a I O驱动组 在第三节中有介绍AUTOSAR 把MCAL 抽象分为4个驱动组 xff0c 分别为 xff1a 微控制器驱动组 xff0c 存储器驱动组 xff0c 通信驱动组 输入 输出驱
  • FreeRTOS学习笔记:FreeRTOS启动方式及流程

    FreeRTOS启动方式及流程 FreeRTOS有两种比较流行的启动方式 1 方式一 xff1a 在main函数中创建所有任务 具体说明 xff1a 在main函数中将硬件初始化 RTOS系统初始化 xff0c 创建所有的任务 xff0c
  • 树莓派4B与Android之缘——树莓派下LineageOS(Android 9)系统开机联网与远程控制

    一 树莓派连接屏幕 1 找到树莓派的micro hdmi口 xff0c 是视频图像的输出口 xff0c 见下图中的MICRO HDMI PORTS 2 连接屏幕 xff08 1 xff09 如果显示屏输入端口是HDMI xff0c 就用mi
  • Deep SDF 、NeuS学习

    DeepSDF Learning Continuous Signed Distance Functions for Shape Representation xff1a 学习用于形状表示的连续有符号距离函数 NeuS Learning Ne
  • layui 引入方式

    layui xff08 谐音 xff1a 类UI 是一款采用自身模块规范编写的前端 UI 框架 xff0c 遵循原生 HTML CSS JS 的书写与组织形式 xff0c 门槛极低 xff0c 拿来即用 其外在极简 xff0c 却又不失饱满
  • ubuntu20.04安装ROS及常见问题

    ubuntu20 04安装ROS及常见问题 一 ubuntu安装参考 xff08 双系统 xff09 1 ios镜像官网下载地址 xff1a https releases ubuntu com ga 61 2 239339907 18418
  • 在jetson xavier nx上配置orbslam3,带稠密重建

    这里写自定义目录标题 主要记录一下踩过的各种坑 xff0c 包括从配置开发板系统到配置orbslam3一条龙服务 xff0c 带cuda加速的opencv3 4 5开发板刷系统将系统移植到M 2硬盘上Sdkmanager安装cuda cud
  • ROS入门教程(五)—— RViz仿真

    上篇文章我们介绍了URDF文件的导出 xff0c 本文将继上文介绍安装完导出URDF文件后 xff0c 如何在机器人操作系统 ROS 中显示 xff0c 并且让它动起来 目录 前言 RViz机器人模型可视化 launch启动RViz配置文件
  • js几种继承

    提示 xff1a 主要是原型链继承 构造函数继承 原型链加构造函数继承 寄生组合式继承 一 原型链继承 子类想要继承父类的属性和方法 xff0c 可以将其原型对象指向父类的实例 xff0c 根据原型链就可以使用到父类的方法和属性 父类 fu