话不多说,直接上MDN链接
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Inheritance_and_the_prototype_chain

说实话啦,上面讲的非常非常详细,大家可以移步去看原文哦,我这里分享一下自己的理解 。

啥是继承

我们知道在js中,万物皆对象,而每一个实例对象(object)都有自己的私有属性(proto)指向它的构造函数的原型对象(prototype),而这个原型对象也有自己的自己的原型对象(proto),层层向上知道一个对象的原型对象为null。根据定义,null没有原型,并作为这个原型链的最后一个环节。简单来说,我继承我爸爸的财富,我爸爸继承我爷爷的财富,我爷爷继承我曾爷爷的财富…直到我的祖先,这个关系链就叫原型链,财富的延续就是继承 。

基于原型链的继承

MDN的官方解释(JavaScript 对象是动态的属性“包”(指其自己的属性)。JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。)
look!是不是非常的浅显易懂,我们来个小example!

我们从函数里创造了一个对象实例o,o自然是继承它老爸的属性的(a和b),所以,我们输出o.a和o.b的时候,其实就是o本身属性a和b,输出的是1和2,尽管我们把老爸b的值更为为3,但输出的b的值仍为2。这里我们要清楚一个逻辑,我们判断其一个属性是否是它的,我们首先要看它有没有,如果他有,我们就认定是它的,如果他没有,我们再顺藤摸瓜,往上找它的原型对象。所以这里o.b是o有的,我们就输出2(这就是属性遮蔽)。同理输出o.c也是如此,c并不是o的自身属性,所以我们要看它的原型对象有没有,c是o.[[Prototype]]的属性吗?是的,该属性的值为 4,我们输出4。所以最后o.d的输出也就是undefined啦。附上一张输出图

继承方法

js中并没有所谓的方法,在js中,任何函数都可以被添加到对象中并作为该对象的一种属性,上述的属性遮蔽也同样适用于函数(也就是所谓的方法重写)。

最后放一张图

js的继承和原型链(更新中)相关推荐

  1. 深入理解 js 之继承与原型链

    原型链与继承 当谈到继承时,JavaScript 只有一种结构:对象.每个实例对象(object )都有一个私有属性(称之为proto)指向它的原型对象(prototype).该原型对象也有一个自己的 ...

  2. JS中对象的四种继承方式:class继承、原型链继承、构造函数继承、组合继承(构造函数和原型链继承的结合)

    前言 才发现之前没有对JavaScript中的继承做过总结,不过看得到是不少,接下来就对这几种继承方式做一下总结. class继承 class继承是ES6引入的标准的继承方式. ES6引入了class ...

  3. 【JS继承】JS继承之原型链继承

    自我介绍:大家好,我是吉帅振的网络日志:微信公众号:吉帅振的网络日志:前端开发工程师,工作4年,去过上海.北京,经历创业公司,进过大厂,现在郑州敲代码. JS继承专栏 1[JS继承]什么是JS继承? ...

  4. ES5常用的组合继承及原型链理解

    ES5常用的组合继承及原型链理解 <!DOCTYPE html> <html lang="en"><head><meta charset= ...

  5. JavaScript之继承(原型链)

    JavaScript之继承(原型链) 我们知道继承是oo语言中不可缺少的一部分,对于JavaScript也是如此.一般的继承有两种方式:其一,接口继承,只继承方法的签名:其二,实现继承,继承实际的方法 ...

  6. 一篇JavaScript技术栈带你了解继承和原型链

    作者 | Jeskson 来源 | 达达前端小酒馆 1 在学习JavaScript中,我们知道它是一种灵活的语言,具有面向对象,函数式风格的编程模式,面向对象具有两点要记住,三大特性,六大原则. 那么 ...

  7. 学习es6的继承与原型链

    es6出现了class类但是此类非彼类和java不一样 上代码 这是typescript未编译的样子 class Pepole{age:number=nullname:string="&qu ...

  8. JS中的继承与原型链

    对于原型我们通过[[prototype]].proto 以及 prototype 这三个概念理解其实现继承的思路. [[prototype]] 在 ECMAScript 标准中规定每个对象都有一个内置 ...

  9. JS 面向对象编程、原型链、原型继承(个人学习总结)

    一.面向对象 1. 面向对象 是所有语言 都有的一种编程思想,组织代码的一种形式 基于对象的语言:JS语言 面向对象的语言:c++ java c# 2. 面向对象 3大特征 封装:将重用代码封装到函数 ...

最新文章

  1. SpringRestTemplate用法详解
  2. anaconda使用方法
  3. 为IT基础设施提供云端储存,云数据存储公司Nasuni获3800万美元股权融资
  4. JS和C#分别防注入代码
  5. ubuntu的mysql教程 pdf_Ubuntu上的MySQL字符集设置技巧
  6. keil接收别人发的工程打不开_STM32工程模板建立之 KEIL 开发平台设置(一)
  7. 题目1198:a+b
  8. Linux curl命令使用代理、以及代理种类介绍(附:curl命令详解)
  9. Android 裁切踩坑
  10. 小程序外包需要注意哪些事情(小程序外包开发流程)
  11. fft 重叠加法_信号分析之:FFT计算中的“重叠”处理 (Overlap Processing)
  12. 一张表实现固定表头和锁定列
  13. vim 使用系统粘贴板复制粘贴
  14. UE4 Slate十一 独立程序,制作BlankProgrammer 待完善
  15. 180天如何突击高考2-从465到378...
  16. 海银财富领军人物:韩宏伟(军人企业家)
  17. 计算机毕业设计之SSM的医院挂号就诊系统
  18. 戴尔sc系列存储阵列柜服务器,入门级SCv2000!戴尔扩大存储产品组合
  19. 互联网赚钱:普通人月入上万的秘密,连载4
  20. PHP仿百度网盘文件分享dzzoffice网盘系统源码

热门文章

  1. django2.0 自己入门记录一些基础url 模板等
  2. vmware:Cannot open the disk 'XXX' or one of the snapshot disks it depends on.
  3. 你可能不知道的Chrome-devtools用法总结
  4. log4j + flume 1.6 集成
  5. JAVA中数据的读取与写入,不同类型数据的转换
  6. hdu 1861 游船出租 tag:模拟
  7. python--创建excel文档
  8. 帝国cms php调用字段,帝国cms模板教程之栏目自定义字段调用教程及代码
  9. java 多线程 关键字_Java多线程常用的几个关键字
  10. Mysql-Windows下重置密码/修改密码