JavaScript面向对象--继承 (超简单易懂,小白专属)

一、继承的概念

  子类共享父类的数据和方法的行为,就叫继承。

二、E55如何实现继承?探索JavaScript继承的本质

  2.1构造函数之间的“复制粘贴”

  第一条路是通过构造函数来继承,这可以理解为子类直接复制了父类构造函数的代码,然后按照一定的规矩“粘贴”在自己的构造函数中,为己所用。举个例子:

  

 如果A要继承B的属性,是不是直接把this.name = name复制粘贴到A函数就可以了?简单粗暴。

 所以在A中,直接执行B函数,不就等于执行了this.name = name吗。

  

  直接这样尝试下,发现是不行的,这是因为B中的this指向B的实例化对象,A中的this指向A的实例化对象,所以要统一this的指向

  

  这样,就完成了一次合乎规范的构造函数之间的“代码复制粘贴”,也就是继承。这其实也是后面ES6中super关键字的实现原理。

  2.2原型链上要“挤进一位来客”

  当然,这还是不够的,因为在实际情况中,B这个构造函数还可以拓展一些方法和属性到原型链上,比如:

  

  我们在构造函数B中拓展了一个skill方法,发现上面那种“复制粘贴”的方法不好使了对吗?这是因为A的原型链和B的原型链还没有“建立联系”,我们需要在A和B之间搭一座桥,把他们联系起来。

  熟悉基本原型链的同学都知道,原型链的“通信”是通过隐式原型(__proto__)来实现的。所以基本原型链是这样的:

  

  这就是基本的原型链,现在的情况是,A要继承B的属性和方法,所以B得加入到原型链中,并且,B要在A的上面,所以理想的情况是不是应该像下面这样:

  

  实际上我们也确实是这么做的,也就是令A.prototype.__proto__ = B.prototype

  控制台试一下,成功了。

  

  总结一下:ES5实现继承需要两步,第一:合乎规范的“代码复制粘贴”;第二,原型链上“搭座桥”。

三,ES6实现继承,其实只是换了种叫法

  首先,要明确JavaScript是没有真正“类”的概念的,ES6中的类,就是ES5中构造函数。

  

  这件事是很容易验证的,类A的类型打印出来,就是function。

   ES6实现类的继承,是不是也要“两步走”呢?答案是肯定的,看看ES6的继承如何实现:

  

  其实原理是完全一样的,extends相当于做了A.prototype.__proto__ = B.prototype这件事,而super则相当于执行了ES5中的B.call(this,name)这个操作,只是换个操作的名字向Java靠拢而已。

原文地址https://www.cnblogs.com/zhangnan35/p/10539370.html

JavaScript面向对象--继承 (超简单易懂,小白专属)...相关推荐

  1. JavaScript编写日历(简单易懂,代码可以直接运行)

    JavaScript编写日历(简单易懂,代码可以直接运行) 运行效果图如下: 点个

  2. html制作计算器val,JavaScript实现的超简单计算器功能示例

    本文实例讲述了JavaScript实现的超简单计算器功能.分享给大家供大家参考,具体如下: 先来看看运行效果: 具体代码: www.ddpool.cn JS计算器 // window.onload 获 ...

  3. java编写教师类输出_Java类和对象的区别和联系,超简单易懂!

    在面向对象的编程语言中,类和对象必然是最核心的特性之一.本文主要介绍Java中的类和对象. 示例 以班级成员为例,班上有小红.小明.小李,还有王老师.张老师和魏老师,我们认为他们都属于"人类 ...

  4. 超简单详细小白双系统安装教程Win10+deepin

    之前一直用的是Ubuntu16.04,此次转为deepin有几大原因,界面美观.国产.易用.也能感受到deepin的团队是一个很用心做国产操作系统的团队.内置搜狗输入法,一键安装网易云音乐,deepi ...

  5. PHP版本对接支付宝支付接口 电脑网站 详细介绍 沙箱环境 超简单易懂

    PHP版本对接支付宝支付接口 其实理顺了思路后,按照我接下来的步骤来,真的超级简单啊,为啥有那么多的朋友们折腾了那么久呢,嘿嘿,接下来跟我走吧~ 我是昨天晚上洗完澡之后,大概八九点,才开始正式开工尝试 ...

  6. phpstudy搭建网站(超简单,小白也能看懂)

    简介 phpStudy是一个PHP调试环境的程序集成包.该程序包集成最新的Apache+PHP+MySQL+phpMyAdmin+ZendOptimizer,一次性安装,无须配置即可使用,是非常方便. ...

  7. 回顾javaScript的面向对象继承

    javaScript面向对象继承           由于js不像java那样是真正面向对象的语言,js是基于对象的,它没有类的概念.所以,要想实现继承,可以用js的原型prototype机制或者用a ...

  8. javascript面向对象系列第三篇——实现继承的3种形式

    前面的话 学习如何创建对象是理解面向对象编程的第一步,第二步是理解继承.开宗明义,继承是指在原有对象的基础上,略作修改,得到一个新的对象.javascript主要包括类式继承.原型继承和拷贝继承这三种 ...

  9. javascript 面向对象编程(封装、继承)

    在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法. Javascript语言不支持"类",但是可 ...

最新文章

  1. 学java时的一些笔记(1)
  2. java中文本框显示在命令按钮后面_Maya中Pymel写个带界面的重命名工具(一)
  3. Java微信公众号开发(五)—— SVN版本控制工具
  4. 如何面试.NET/ASP.NET工程师?
  5. Java隐含对象实验报告,JSP隐含对象response实现文件下载
  6. 剪切粘贴时总是上次的内容_关于复制粘贴,还有一个鲜为人知的技巧!
  7. 解决JupyterLab/JupyterNotebook安装pycherts后依旧报错报错 ModuleNotFoundError: No module named ‘pyecharts‘
  8. 搜索引擎算法的139个相关因素【SEO】
  9. 用perl操作word
  10. 德国计算机专业英语授课,德国留学——细数德国亚琛工大的英语授课硕士专业...
  11. ds90ub934 i2c 配置_TI ds90ub954 芯片调试简单总结
  12. 计算机如何使用键盘复制粘贴,电脑复制粘贴快捷键,小编教你电脑怎么用键盘复制粘贴...
  13. 使用STM32,接触USB功能
  14. 世界知名半导体ST、NXP、Microchip、TI、Renesas公司的MCU和MPU定位、性能及特点
  15. Mac查看端口号占用
  16. ux和ui_UI和UX设计人员的47个关键课程
  17. 如何查看自己电脑开启了哪些端口号
  18. day40 ORM sqlalchemy
  19. AM335X 内存配置
  20. java正序输出整数_java实现:将一个数逆序输出

热门文章

  1. java etcd api_在java中如何使用etcd的v2 和v3 api获取配置,并且对配置的变化进行监控和监听...
  2. excel重复上一步快捷键_13个excel快捷键,让你的1秒钟,抵得上同事的5分钟
  3. mysql 时间 sql_MySQL sql语句获取当前日期|时间|时间戳
  4. android adt带的ddms的heap功能不显示进程,Android内存泄露之DDMS – Heap工具
  5. 156 13.67用matlab答案,MATLAB习题答案
  6. java subset_Java TreeSet subSet()方法
  7. python定时器的使用方法_Python timer定时器两种常用方法解析
  8. HTML渐变背景不重复,如何停止重复自身的背景颜色渐变? (css)
  9. 运行项目报错invalid notify_url
  10. 安装注册数据库管理工具