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

 更新时间:2014年12月30日 09:44:22   投稿:junjie  
这篇文章主要介绍了JavaScript中对象property的读取和写入方法介绍,本文讲解了原型继承链中property的读取、原型继承链中property的写入等内容,需要的朋友可以参考下

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原型对象不会有任何改动。

相关文章

  • js实现的简练高效拖拽功能示例

    js实现的简练高效拖拽功能示例

    这篇文章主要介绍了js实现的简练高效拖拽功能,通过对js鼠标事件的扩展实现拖拽效果,非常简单实用,需要的朋友可以参考下
    2016-12-12
  • JS简单计算器实例

    JS简单计算器实例

    这篇文章主要介绍了JS简单计算器的实现方法,以加法实例分析了js实现计算功能的技巧,需要的朋友可以参考下
    2015-01-01
  • 纯JS实现旋转图片3D展示效果

    纯JS实现旋转图片3D展示效果

    本文给大家分享的是纯js实现的类似flash里的图片环绕旋转效果,非常炫酷,有需要的小伙伴可以参考下。
    2015-04-04
  • JS实现数组去重及数组内对象去重功能示例

    JS实现数组去重及数组内对象去重功能示例

    这篇文章主要介绍了JS实现数组去重及数组内对象去重功能,结合实例形式分析了ES5与ES6两种版本针对数组去重的相关操作技巧,需要的朋友可以参考下
    2019-02-02
  • 浅谈DOM的操作以及性能优化问题-重绘重排

    浅谈DOM的操作以及性能优化问题-重绘重排

    下面小编就为大家带来一篇浅谈DOM的操作以及性能优化问题-重绘重排。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-01-01
  • js实现快速分享功能(你的文章分享工具)

    js实现快速分享功能(你的文章分享工具)

    这是一款简单易用的文章分享工具,您只需将下面的html代码拷贝到模板中就可以实现文章快速分享功能,具体的实现如下,感兴趣的朋友可以参考下哈,希望对大家有所帮助
    2013-06-06
  • javascript里模拟sleep(两种实现方式)

    javascript里模拟sleep(两种实现方式)

    有几种方式,但都不完美 其一:不断循环,直到达到指定时间、其二:用xhr同步请求后台程序,比如传2000过去,后台就sleep 2秒后再返回,这种方式也有缺点,当N多客户端都请求后台时,一直保持连接http开销很大,感兴趣的朋友可以了解下啊
    2013-01-01
  • javascript巧用eval函数组装表单输入项为json对象的方法

    javascript巧用eval函数组装表单输入项为json对象的方法

    这篇文章主要介绍了javascript巧用eval函数组装表单输入项为json对象的方法,实例分析了JavaScript使用eval函数动态构造json对象的相关技巧,需要的朋友可以参考下
    2015-11-11
  • 获取select元素被选中的文本内容的js代码

    获取select元素被选中的文本内容的js代码

    获取select元素被选中的文本内容的方法有很多,本文为大家介绍下使用javascript来轻松实现下
    2014-01-01
  • JS实现的简易拖放效果示例

    JS实现的简易拖放效果示例

    这篇文章主要介绍了JS实现的简易拖放效果的方法,涉及JS事件监听、扩展及页面元素动态操作的相关技巧,需要的朋友可以参考下
    2016-12-12

最新评论