今天看ES6的class時,看到了Object.defineProperty()這一ES5的定義對象屬性的方法。函數
在js中咱們能夠經過下面這幾種方法定義屬性:性能
1 // (1) define someOne property name 2 3 someOne.name = 'cover'; 4 5 //or use (2) 6 7 someOne['name'] = 'cover'; 8 9 // or use (3) defineProperty 10 11 Object.defineProperty(someOne, 'name', { value : 'cover' })
今天另外兩個很少說了,主要講第三個,今天的主角Object.defineProperty()spa
其使用語法是這樣的:code
Object.defineProperty(obj, prop, descriptor)
obj 須要被操做的目標對象對象
prop
目標對象須要定義或修改的屬性的名稱blog
descriptor
將要被定義或修改的屬性的描述符ip
主要講descriptor描述符,其形式主要有兩種:數據描述符(value/writable)和存取描述符(getter/setter),在定義對象屬性時,描述符只能是其中之一,不能同時是二者get
◆描述符的可選鍵值it
數據描述符和存取描述符均具備的一下可選鍵值table
configurable:表示對象的屬性是否能夠被刪除,以及除 writable 特性外的其餘特性是否能夠被修改(writable可被修改,但只能被改成false) 默認值:false
enumerable:表示該屬性可否出如今對象的枚舉屬性中。定義了對象的屬性是否能夠在 for...in 循環 和 Object.keys() 中被枚舉 默認值:false
數據描述符的可選鍵值
value:表示該屬性對應的值。能夠是任何有效的 JavaScript 值(數值,對象,函數等)默認值:undefined
writable:表示該屬性可否被複制運算符所改變。爲false時,屬性值不能被修改,屬性值被修改時不會改變其值,但也不會報錯 默認值:false
存取描述符的可選鍵值
get:當訪問該屬性時,就會調用這個方法,並返回結果 默認值:undefined
set:當設置該屬性時,就會調用這個方法 默認值:undefined