Object.defineProperty()
方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。
const obj1 = {};
Object.defineProperty(obj1, 'age', {
value: 66,
writable:true,
enumerable:true,
configurable:true
})
/***
* Object.defineProperty 允许精确的添加或者修改对象的属性,
* 默认情况下,使用Object.definePropety 添加的属性是不可以修改的(immutable)
*
* configurable: 当且仅当该属性的configurable 键值 为 true 时,该属性的描述符
* 才能被改变,同时该属性也能从对应的对象上被删除,默认为false
*
* enumerable: 当且仅当该属性的emumerable 键值为 true 时,
* 该属性才会出现在该对象的枚举属性中,
* 默认为false
*
* 数据描述符还具体以下可选键值
*
* value: 该属性对应的值,任何有效的JavaScript 值(数值,对象,函数)
* 默认为 undefined
*
*
* writable:
* 当且仅当该属性为true时,才能被改变。默认为false
*
* 存取描述符具有以下可选键值
* get: 属性的getter 函数。如果没有getter ,则为underfined.
* 当访问该属性时,会调用getter 函数,执行时不传人任何参数,但是会
* 传入this 对象(由于继承关系,这里的this 并不一定是定义该属性的对象)
* 该函数的返回值会被用作属性的值默认为undefined
*
* set: 属性的setter函数。如果没有setter,则为undefined.
* 当属性被修改时,会调用此函数,该方法接受一个参数,会传入赋值时的this对象
* 默认为undefined
*
* */