图解JavaScript原型链

假设父类 parentScope 有如下成员属性 : aString, aNumber, anArray, anObject 子类 childScope 继承父类 parentScope,现在的原型链结构如下

如果 childScope 尝试去访问 parentScope 中定义的属性,JavaScript 会先在 childScope 中查找,如果没有该属性,则找它继承的 scope 去获取属性,如果继承的原型对象 parentScope中都没有该属性,那么继续在它的原型中寻找,从原型链一直往上直到到达 rootScope 执行下面的语句 childScope.aString = 'child string' 原型链并没有被查询,反而是在 childScope 中增加了一个新属性 aString。这个新属性覆盖了 parentScope 中的同名属性

执行操作: childScope.anArray[1] = '22' childScope.anObject.key1 = 'child prop1' 这时 原型链被查询了,因为对象 anArray 和 anObject 在 childScope 中没有找到,它们在 parentScope 中被找到了,并且值被更新,childScope 中没有增加新的属性,也没有任何新的对象被创建

注意,这个操作是修改属性内部的值,而不是直接给属性赋值,所以不会在子scope中添加属性

执行操作: childScope.anArray = [100, 555] childScope.anObject = { name: 'Mark', country: 'USA' } 这时 原型链没有被查询,并且子 Scope 新加入了两个新的对象属性,它们覆盖了 parentScope 中的同名对象属性

原文发布于微信公众号 - 性能与架构(yogoup)

原文发表时间:2015-11-03

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏菜鸟计划

angularjs filter详解

过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果。 主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的...

38280
来自专栏移动端开发

内存管理说明白点

15620
来自专栏云霄雨霁

Java--对象的克隆

16370
来自专栏LeetCode

LeetCode 162. Find Peak Element

题目大意:在一个数组中寻找一个峰值,题目的最后一句话是一个关键,如果没有这句话,我想大多数首先想到的就是一个一个的判断,这样的话算法复杂度是O(n),实际上本题...

11700
来自专栏猿人谷

浅谈C/C++中的指针和数组(一)

                                                       浅谈C/C++中的指针和数组(一)       指...

22450
来自专栏JMCui

读书笔记 之《Thinking in Java》(对象、集合、异常)

一、前言:     本来想看完书再整理下自己的笔记的,可是书才看了一半发现笔记有点多,有点乱,就先整理一份吧,顺便复习下前面的知识,之后的再补上。     真的...

37980
来自专栏深度学习自然语言处理

谈一谈python中的魔法变量*args和**kwargs

,没有注释,没有封装,没有可读性。哎,幸亏发现及时,现在正在写一个新的任务,刚好可以好好弄弄架构和代码了!

10330
来自专栏Java帮帮-微信公众号-技术文章全总结

Java面试系列6

清明即事 帝里重清明, 人心自愁思。 车声上路合, 柳色东城翠。 花落草齐生, 莺飞蝶双戏。 空堂坐相忆, 酌茗聊代醉。 1.String是最基本的数据类型吗...

27750
来自专栏Coding迪斯尼

reactjs自制Monkey语言编译器:解析组合表达式,ifelse语句块和间套函数调用

7630
来自专栏Java3y

LinkedHashMap就这么简单【源码剖析】

17340

扫码关注云+社区

领取腾讯云代金券