數據屬性 | 訪問器屬性 | |
---|---|---|
共同特性 | [[enumerable]] |
|
[[configurable]] |
||
特有特性 | [[writable]] |
[[get]] |
[[value]] |
[[set]] |
|
設置單個屬性方法 | Object.defineProperty(obj, prop, descriptor) |
|
設置多個屬性方法 | Object.defineProperties(obj, props) |
|
讀取單個屬性描述符 | Object.getOwnPropertyDescriptor(obj, prop) |
|
讀取對象全部屬性描述符 | Object.getOwnPropertyDescriptors(obj) |
|
備註 | obj: 須要被操做的目標對象; prop: 目標對象須要定義(讀取)或修改的屬性的名稱; descriptor: 將被定義或修改的屬性的描述符; props: 該對象的一個或多個鍵值對定義了將要爲對象添加或修改的屬性的具體配置; |
|
[[Configurable]]
:函數
- 表示可否經過
delete
刪除屬性從而從新定義屬性,(設置爲false,表示不能從對象中刪除屬性(在嚴格模式下調用delete
會報錯)),- 可否修改屬性的特性,
- 可否把數據屬性修改成訪問器屬性(或相反),
- 從
true
修改成false
是單向的,即一旦把把屬性定義爲不可配置的,就不能再把它變回可配置了(此時只能單向修改writable
從true
到false
)。[[Enumerable]]
: 表示可否經過for-in
循環返回屬性[[Writable]]
: 表示可否修改屬性的值[[Value]]
: 包含這個屬性的數據值[[Get]]
: 讀取屬性時調用的函數,默認值爲undefined
[[Set]]
: 寫入屬性時調用的函數,默認值爲undefined
其中直接在對象上定義的屬性,[[Configurable]]
,[[Enumerable]]
,[[Writable]]
默認值均爲true;
經過Object.defineProperty()
方法或Object.defineProperties()
方法,若是不指定writale
,enumerable
,configurable
的值,則所有默認爲 false。
Object.defineProperty(book, 'actor', { value: 'Nicholas' })
var book = {} Object.defineProperties(book,{ _year:{ writable: true, value: 2004 }, edition:{ writable: true, value: 1 }, // year爲訪問器屬性 year:{ get: function(){ return this._year; }, set: function(newValue){ if(newValue > 2004){ this._year = newValue; this.edition += newValue - 2004; } } } }); // {_year: 2004, edition: 1}
Object.getOwnPropertyDescriptor(book, '_year'); // {value: 2006, writable: true, enumerable: false, configurable: false} Object.getOwnPropertyDescriptor(book, 'edition'); // {value: 3, writable: true, enumerable: false, configurable: false} Object.getOwnPropertyDescriptor(book, 'year'); // {get: ƒ, set: ƒ, enumerable: false, configurable: false} Object.getOwnPropertyDescriptor(book, 'actor'); // {value: "Nicholas", writable: false, enumerable: false, configurable: false}
Object.getOwnPropertyDescriptors(book)
從上面代碼Object.getOwnPropertyDescriptor()
執行結果中能夠看出來, 經過Object.defineProperty()
方法或Object.defineProperties()
方法,若是不指定數據屬性或訪問器屬性的writale
,enumerable
,configurable
的值,則所有默認爲false
。