首先介绍一下这个方法
Object.defineProperty(obj,prop,descriptor)
obj:需要被操作的目标对象
prop:目标对象需要定义或修改的属性
descriptor: 修改属性的描述符
简单来说,这个方法允许精确添加或修改对象的属性
对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。
数据描述符:一个拥有可写或不可写值的属性
存取描述符:由一对getter-setter函数功能来描述的属性
描述符必须是两种形式之一,两者不能同时存在
数据描述符
- configurable:当且仅当该属性的值为true时,该属性描述符才能被改变,同时该属性也能从对应的对象上被删除。默认为false
- enumerable:当该属性的值为true时,该属性才能够被枚举,默认false
- value:为该属性的值,可以是任何有效的javascript值(对象,函数等)。默认undefined
- writable:当该值为true时,该属性才能被赋值运算符改变。默认false
存取描述符
- get:一个给属性提供getter的方法,如果没有则为undefined。改方法返回值被用作属性值。默认undefined
- set:属性的setter方法,接受唯一参数,并将该参数的新值分配给该属性。默认undefined