JavaScript中对象property的读取和写入方法介绍


Posted in Javascript onDecember 30, 2014

JavaScript中,可以通过点号操作符”.”或者中括号操作符”[]“来对对象的property进行读取和写入:

var o = {x:1, y:2};

console.log(o.x);//1

console.log(o["y"]);//2

o.y = 7;

console.log(o["y"]);//7

值得注意的是,如果使用中括号操作符,则操作符内的值类型必须是string,或者能够转换成string的表达式:

console.log(o[y]);//ReferenceError: y is not defined

var v = "y";

console.log(o[v]);//7

与Java语言不同的是,JavaScript中对象的property可以动态添加或删除。当对某个property进行赋值操作时,如果该property不存在,JavaScript会在对象中动态添加此property:

o.z = 99;

console.log(o);//Object {x=1, y=7, z=99}

 

原型继承链中property的读取

 

JavaScript中所有的对象均有一个prototype原型对象,并从该原型对象中继承property;因此,JS中一个对象的property分成两大类:

1.对象自身所拥有的property(“Own Property”)。
2.从原型对象处继承而来的property。

当读取对象的property时,所遵循的规则如下:

1.从对象自身的property集合(“Own Property”)中搜索需要读取的property;如果可以搜索到,则直接读取该property并返回其值。
2.如果无法从对象自身的property集合(“Own Property”)中搜索到该property,那么则从对象的prototype原型链中继续进行搜索,直至搜索到该property并返回其值。
3.如果无法从对象自身的property集合(“Own Property”)中搜索到该property,也无法从对象的所有prototype对象中搜索到该property,则返回undefined。

原型继承链中property的写入

在对JavaScript对象的property进行写入时,所遵循的规则如下:

1.如果对象自身有该property,且该property可写,则将新值写入该property。如果该property只读,则报错。
2.如果对象自身没有该property,且其所有的prototype对象中也不存在该property,则将此property添加到该对象中。
3.如果对象自身没有该property,但其prototype对象中存在该property且可写,那么JS会在对象中新建这个property;也就是说,该对象覆写了其prototype对象中的这个property。prototype对象中此property值不变。
4.如果对象自身没有该property,但其prototype对象中存在该property且只读,则报错。
5.如果对象自身没有该property,但其prototype对象中存在该property的setter方法,那么JS会调用该prototype对象中的setter方法。值得注意的是,在运行setter方法时,如果涉及到变量赋值,那么赋值操作将作用在对象自身上,而prototype对象不会有任何改动。对于这一行为,可以理解为:对象从prototype处继承了setter函数并加以执行。

从上述规则中可以发现,如果对property的赋值操作成功,那么最后被修改的永远是对象自身,其prototype原型对象不会有任何改动。

Javascript 相关文章推荐
YUI 读码日记之 YAHOO.lang.is*
Mar 22 Javascript
javascript 一段左右两边随屏滚动的代码
Jun 18 Javascript
jquery星级插件、支持页面中多次使用
Mar 25 Javascript
jquery iframe操作详细解析
Nov 20 Javascript
使用jquery局部刷新(jquery.load)从数据库取出数据
Jan 22 Javascript
Javascript基础教程之数组 array
Jan 18 Javascript
JavaScript中Date.toSource()方法的使用教程
Jun 12 Javascript
javascript特殊日历控件分享
Mar 07 Javascript
p5.js 毕达哥拉斯树的实现代码
Mar 23 Javascript
Angular4.x通过路由守卫进行路由重定向实现根据条件跳转到相应的页面(推荐)
May 10 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
Jun 24 Javascript
vue 导航菜单刷新状态不消失,显示对应的路由界面操作
Aug 06 Javascript
jQuery中:last选择器用法实例
Dec 30 #Javascript
JavaScript中对象property的删除方法介绍
Dec 30 #Javascript
JavaScript中检查对象property的存在性方法介绍
Dec 30 #Javascript
JavaScript中遍历对象的property的3种方法介绍
Dec 30 #Javascript
JavaScript语言对Unicode字符集的支持详解
Dec 30 #Javascript
JavaScript中的对象的extensible属性介绍
Dec 30 #Javascript
JavaScript中的对象序列化介绍
Dec 30 #Javascript
You might like
用php来检测proxy
2006/10/09 PHP
php获取bing每日壁纸示例分享
2014/02/25 PHP
php中mysql连接和基本操作代码(快速测试使用,简单方便)
2014/04/25 PHP
php编写简单的文章发布程序
2015/06/18 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
Yii 2.0自带的验证码使用经验分享
2017/06/19 PHP
javascript 解析url的search方法
2010/02/09 Javascript
jquery ui resizable bug解决方法
2010/10/26 Javascript
javascript中用星号表示预录入内容的实现代码
2011/01/08 Javascript
读jQuery之一(对象的组成)
2011/06/11 Javascript
js中substr,substring,indexOf,lastIndexOf的用法小结
2013/12/27 Javascript
js使用栈来实现10进制转8进制与取除数及余数
2014/06/11 Javascript
DOM基础教程之模型中的模型节点
2015/01/19 Javascript
浅谈document.write()输出样式
2015/05/07 Javascript
AngularJS中如何使用$http对MongoLab数据表进行增删改查
2016/01/23 Javascript
快速掌握Node.js环境的安装与运行方法
2016/02/16 Javascript
Backbone.js框架中Model与Collection的使用实例
2016/05/07 Javascript
一次$.getJSON不执行的简单记录
2016/07/19 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
Vue 中如何正确引入第三方模块的方法步骤
2019/05/05 Javascript
Layui数据表格跳转到指定页的实现方法
2019/09/05 Javascript
如何使用JS console.log()技巧提高工作效率
2020/10/14 Javascript
以一个投票程序的实例来讲解Python的Django框架使用
2016/02/18 Python
python操作 hbase 数据的方法
2016/12/18 Python
Django如何将URL映射到视图
2019/07/29 Python
wxpython绘制音频效果
2019/11/18 Python
Python中bisect的使用方法
2019/12/31 Python
美国百年历史早餐食品供应商:Wolferman’s
2017/01/18 全球购物
波兰家居和花园家具专家:4Home
2019/05/26 全球购物
彪马法国官网:PUMA法国
2019/12/15 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
机电专业大学生求职信
2013/10/04 职场文书
口腔医学技术应届生求职信
2013/11/09 职场文书
在校学生职业规划范文
2014/01/08 职场文书
《花木兰》教学反思
2014/04/09 职场文书
好习惯伴我成长演讲稿
2014/05/21 职场文书