第十九章 类的继承

一、继承

  1. 面向对象三大特点:封装,继承,多态
    • 封装:打包
    • 继承:一个对象A不具有某个功能a,通过某种方式使用了对象B的a功能 的过程
    • 多态:对象或功能的多种形态,在使用某个对象时,不关心从哪来,在封装某个对象时,不关心将要在哪被使用
  2. 继承
    • 构造函数执行之后得到的实例,继承了原型身上的方法(实例继承了类的原型)
    • 类与类之间的继承
  3. 继承方式
    • 构造函数继承(改变this指向继承)
      • call,apply,bind
      • 简单方便易操作
      • 非常易于做多继承
      • 只能继承构造函数内的属性或方法,不能继承原型身上的属性或方法
    • 原型对象继承
      • 其实就是在拷贝原型对象,同时注意深浅拷贝
      • 只能继承原型对象上的属性或方法,不能继承构造函数内的属性或方法
      • 可以实现多继承
    • 原型链继承
      • 既能继承构造函数内的属性或方法,又能继承原型上的属性或方法
      • 但是不方便处理参数
      • 不适合多继承
    • 混合(组合)继承
      • 构造函数+原型对象
      • 构造函数+原型链
      • 集合了各种方式的优点
    • ES6新增的class的继承
      • 语法层面上的继承
      • 父类是子类的超类
      • 原理:构造函数+原型继承

二、原型

  1. 隐式原型对象:__proto__,一般存在于对象身上,用于指向创建该对象的构造函数的prototype
  2. 显示原型对象:prototype,只存在于函数身上(除了箭头函数),用来被通过自身创建的对象的__proto__指向。
  3. 隐式原型的使用规则:
    • 每个对象都有__proto__,对象每次在使用属性或方法时,如果自身不存在,都会沿着__proto__的指向,依次查找,直到Object.prototype
    • 一个构造函数可以创建多个实例,如果给构造函数的prototype添加方法或属性,将来的每个实例都可以访问,达到节省内存的效果
    • 构造函数的prototype类似于将来所有实例的公共空间,提供公共方法,被实例使用
  4. 补充:构造函数的prototype自带了一个constructor的属性,用来标记当前prototype对象所属的函数

三、原型和实例关系的检测

  1. 关键字:instanceof
    • 语法:实例 instanceof 构造函数
  2. 显式原型对象的方法:isPrototypeOf()
    • 语法:构造函数.prototype.isPrototypeOf(实例)
  3. 有关系,无论多少层,都返回true,否则返回false
  4. 小技巧:可以利用该关系检测方式区分对象,数组

相关推荐

  1. 继承

    2024-01-12 09:36:03       34 阅读
  2. (二)继承和导入

    2024-01-12 09:36:03       33 阅读
  3. 继承与派生之——继承与派生

    2024-01-12 09:36:03       28 阅读
  4. C++PrimerPlus:继承:抽象基

    2024-01-12 09:36:03       5 阅读
  5. C++ primer

    2024-01-12 09:36:03       19 阅读
  6. SOAP 错误处理

    2024-01-12 09:36:03       6 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-12 09:36:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-12 09:36:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-12 09:36:03       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-12 09:36:03       20 阅读

热门阅读

  1. Windows Copilot 更新及使用教程

    2024-01-12 09:36:03       109 阅读
  2. go-zero

    2024-01-12 09:36:03       39 阅读
  3. fastjson2 转换别名 null变空字符串

    2024-01-12 09:36:03       21 阅读
  4. 【Vue技巧】Vue2和Vue3组件上使用v-model的实现原理

    2024-01-12 09:36:03       37 阅读
  5. Python从入门到精通秘籍三

    2024-01-12 09:36:03       40 阅读
  6. C++ 类访问修饰符

    2024-01-12 09:36:03       26 阅读
  7. C++ 类构造函数 & 析构函数

    2024-01-12 09:36:03       40 阅读
  8. 基于STM32设计的智能饮水机(微信小程序)

    2024-01-12 09:36:03       38 阅读
  9. jw01-v2.2三合一传感器使用方法:esp8266,arduino

    2024-01-12 09:36:03       31 阅读