首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图解JavaScript原型链

图解JavaScript原型链

作者头像
dys
发布2018-04-03 10:01:25
6540
发布2018-04-03 10:01:25
举报
文章被收录于专栏:性能与架构性能与架构

假设父类 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 中的同名对象属性

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 JAVA高性能架构 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档