js的继承和原型链(更新中)
话不多说,直接上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的继承和原型链(更新中)相关推荐
- 深入理解 js 之继承与原型链
原型链与继承 当谈到继承时,JavaScript 只有一种结构:对象.每个实例对象(object )都有一个私有属性(称之为proto)指向它的原型对象(prototype).该原型对象也有一个自己的 ...
- JS中对象的四种继承方式:class继承、原型链继承、构造函数继承、组合继承(构造函数和原型链继承的结合)
前言 才发现之前没有对JavaScript中的继承做过总结,不过看得到是不少,接下来就对这几种继承方式做一下总结. class继承 class继承是ES6引入的标准的继承方式. ES6引入了class ...
- 【JS继承】JS继承之原型链继承
自我介绍:大家好,我是吉帅振的网络日志:微信公众号:吉帅振的网络日志:前端开发工程师,工作4年,去过上海.北京,经历创业公司,进过大厂,现在郑州敲代码. JS继承专栏 1[JS继承]什么是JS继承? ...
- ES5常用的组合继承及原型链理解
ES5常用的组合继承及原型链理解 <!DOCTYPE html> <html lang="en"><head><meta charset= ...
- JavaScript之继承(原型链)
JavaScript之继承(原型链) 我们知道继承是oo语言中不可缺少的一部分,对于JavaScript也是如此.一般的继承有两种方式:其一,接口继承,只继承方法的签名:其二,实现继承,继承实际的方法 ...
- 一篇JavaScript技术栈带你了解继承和原型链
作者 | Jeskson 来源 | 达达前端小酒馆 1 在学习JavaScript中,我们知道它是一种灵活的语言,具有面向对象,函数式风格的编程模式,面向对象具有两点要记住,三大特性,六大原则. 那么 ...
- 学习es6的继承与原型链
es6出现了class类但是此类非彼类和java不一样 上代码 这是typescript未编译的样子 class Pepole{age:number=nullname:string="&qu ...
- JS中的继承与原型链
对于原型我们通过[[prototype]].proto 以及 prototype 这三个概念理解其实现继承的思路. [[prototype]] 在 ECMAScript 标准中规定每个对象都有一个内置 ...
- JS 面向对象编程、原型链、原型继承(个人学习总结)
一.面向对象 1. 面向对象 是所有语言 都有的一种编程思想,组织代码的一种形式 基于对象的语言:JS语言 面向对象的语言:c++ java c# 2. 面向对象 3大特征 封装:将重用代码封装到函数 ...
最新文章
- SpringRestTemplate用法详解
- anaconda使用方法
- 为IT基础设施提供云端储存,云数据存储公司Nasuni获3800万美元股权融资
- JS和C#分别防注入代码
- ubuntu的mysql教程 pdf_Ubuntu上的MySQL字符集设置技巧
- keil接收别人发的工程打不开_STM32工程模板建立之 KEIL 开发平台设置(一)
- 题目1198:a+b
- Linux curl命令使用代理、以及代理种类介绍(附:curl命令详解)
- Android 裁切踩坑
- 小程序外包需要注意哪些事情(小程序外包开发流程)
- fft 重叠加法_信号分析之:FFT计算中的“重叠”处理 (Overlap Processing)
- 一张表实现固定表头和锁定列
- vim 使用系统粘贴板复制粘贴
- UE4 Slate十一 独立程序,制作BlankProgrammer 待完善
- 180天如何突击高考2-从465到378...
- 海银财富领军人物:韩宏伟(军人企业家)
- 计算机毕业设计之SSM的医院挂号就诊系统
- 戴尔sc系列存储阵列柜服务器,入门级SCv2000!戴尔扩大存储产品组合
- 互联网赚钱:普通人月入上万的秘密,连载4
- PHP仿百度网盘文件分享dzzoffice网盘系统源码
热门文章
- django2.0 自己入门记录一些基础url 模板等
- vmware:Cannot open the disk 'XXX' or one of the snapshot disks it depends on.
- 你可能不知道的Chrome-devtools用法总结
- log4j + flume 1.6 集成
- JAVA中数据的读取与写入,不同类型数据的转换
- hdu 1861 游船出租 tag:模拟
- python--创建excel文档
- 帝国cms php调用字段,帝国cms模板教程之栏目自定义字段调用教程及代码
- java 多线程 关键字_Java多线程常用的几个关键字
- Mysql-Windows下重置密码/修改密码