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

相關文章
相關標籤/搜索