JavaScript中的数据属性和访问器属性

JavaScript中的属性包含数据属性和访问器属性函数

1.数据属性。数据属性包含的是一个值的位置,能够对这个值进行读写this

  • 数据属性又包含了四个特性。configurable,writable,enumerable,和value,分别表明属性可配置,可写,可枚举,值
  • 能够经过Object.getOwnPropertyDescriptor(对象,属性名)查看属性的特性
  • 修改数据属性的方法是Obejct.defineProperty(对象,属性名,描述符对象)
  • 将属性的configurable设置为false后,只能修改writable的属性,不然在严格模式下回报错

2.访问器属性。这个属性不包含数据值,包含的是一对get和set方法,在读写访问器属性时,就是经过这两个方法来进行操做处理的。访问器属性包含的四个特性spa

  • configurable:表示可否经过delete删除属性从而从新定义属性,可否修改属性的特性,或可否把属性修改成访问器属性,默认为false
  •  enumerable:表示可否经过for-in循环返回属性,默认为false
  •  Get:在读取属性时调用的函数,默认值为undefined
  •  Set:在写入属性时调用的函数,默认值为undefined

访问器属性不能直接定义,要经过Object.defineProperty()这个方法来定义。code

var person = {name:'tu'}
Object.defineProperty(person,'age',{
    
get:function(){return 10},
set:function(value){this.age = 10+value} //这样设置会产生递归
})
person.age = 10  //报错 ,由于设置name属性会递归无限循环
alert(person.age)   
for(prop in person){alert(prop)}  //只会打印出name属性,age属性默认不可枚举

若是没有设置get则这个属性不可读,若是没有设置set,这个属性不可修改;对象

若是set和set都没定义那这个属性就是数据属性blog

3.能够经过Object.defineProperties(对象,描述对象)定义多个属性(数据属性或者访问器属性),经过这个方式新增的属性 属性特性都为false递归

能够经过Object.getOwnPropertyDescriptors(对象)查看对象全部属性的信息ip

相关文章
相关标签/搜索