Object.defineProperty的功能就是在现有的属性进行修改或添加

let Person ={}
Person.name = 'Tom'

等于

let Person = {}
Object.defineProperty(Person, 'name',{
        value: 'jack',
        configurable: false,
        writable: true,
        enumerable: false})
Person.name = 'Tom'

不同的是,

configurable属性 默认falise  ,当是true的时候 name属性才能删除 

writable属性 默认 false , 当是true的时候 name属性才允许修改

enumeravle属性默认 false, 当是true的时候 该属性可枚举

 

 Object.defineProperty的存取描述符  get set

get属性是在属性读取的时候的函数

set属性是在属性写入的时候调用的函数