今天看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