JavaScript对象属性设置和屏蔽技巧
正文
了解了获取对象属性的基本方式,在当前对象中不存在的属性,会沿着对象的原型链不断往上查找目标属性,直至找到或到Object.prototype
都不存在而结束查找。
思考如下代码:
myObject.foo = 100
当我们设置对象的某个属性,也可能会出现类似的问题。
有几种情况:
- 当前对象存在,原型链对象不存在
- 当前对象存在,原型链对象也存在
- 当前对象不存在,而原型链对象中存在
- 都不存在:当前对象和原型链各对象中都不存在设置属性
我们先来说下最常见,也最简单的场景:
属性仅存在于当前对象中,而原型链中不存在,且属性在对象中是可写的,那需要做的仅仅是赋值操作,改变属性值即可。
还有种情况,处理方式也比较简单:当前对象和原型链上都不存在该属性,且是可写的,那会在最底层,也就是当前对象新增这个属性,并赋值。
如果在当前对象和原型链中都存在,就会发生屏蔽,会优先选择最底层对象属性。也就是说只要当前对象属性可以被赋值,那就对当前对象属性值进行操作;如果原型链对象上的该属性是被设置了可读,那当前对象并未进行修改,则不可操作,严格模式下,还会报错。
最后一种情况,如果属性不存在与当前对象而仅出现在原型链对象中,属性均可写,那会如何呢?
思考如下代码:
const myObject = { foo: 100 } const createObject = Object.create(myObject) createObject.foo = 200 console.log(myObject.foo, createObject.foo) // 100 200
正常来说,如果没有createObject.foo
操作,则createObject对象是空的,不存在foo属性,赋值操作后,从打印的结果可以看出,它会给当前新对象创建新属性并赋值,且原型指向的对象不会受当前对象赋值的影响。
以上就是JavaScript对象属性设置和屏蔽的小技巧内容,更多关于JavaScript对象属性设置屏蔽的资料请关注脚本之家其它相关文章!
相关文章
jQuery与原生JavaScript选择HTML元素集合用法对比分析
这篇文章主要介绍了jQuery与原生JavaScript选择HTML元素集合用法,结合实例形式对比分析了jquery与原生JavaScript选择页面HTML相关操作方法、注意事项及运行效率,需要的朋友可以参考下2019-11-11Google Map Api和GOOGLE Search Api整合实现代码
将GOOGLE MAP API 和 GOOGLE Search API 进行整合,我用面向对象的方式写了一个类,通过传一个经纬度进去,自动通过GOOGLE LOCAL SEARCH获取附近的相关信息。比如餐厅、景点等,反过来标到地图上,并可在任意容器内显示。2009-07-07把json格式的字符串转换成javascript对象或数组的方法总结
下面小编就为大家带来一篇把json格式的字符串转换成javascript对象或数组的方法总结。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧2016-11-11window.setInterval()方法的定义和用法及offsetLeft与style.left的区别
window.setInterval()方法可以按照指定的周期执行来执行一段程序。周期是以毫秒为单位的,本文给大家介绍window.setInterval()方法的定义和用法,感兴趣的朋友参考下2015-11-11JS中字符问题(二进制/十进制/十六进制及ASCII码之间的转换)
对于js的进制转换的一些方法分析2008-11-11
最新评论