1.Object.defineProperty()用法object.defineProperty()方法会直接在指定的对象上定义一个新的属性,或者修改一个已有的属性2.参数和返回值详解Object.defineProperty(object,prop,descriptor)可以接受三个参数:object:目标对象prop:目标对象中的属性名desriptor:要定义或修改的属性描述符返回值:传递给函数的对象3、属性描述符属性描述符有两种:Data属性描述符,访问属性描述符configurableenumerablevaluewritablegetset数据属性描述符canyesyesnonono访问属性描述符yesnoyesnoyes数据属性描述符:1、[[configurable]]:表示属性是否可以被delete删除,属性是否可以修改,作为访问属性是否可以修改(1)当我们直接在对象上定义属性时,它的默认值为true(2)而当我们通过属性描述符定义一个属性时,它的默认值为false2,[[enumerable]]:表示该属性是否可以通过for-in或者Object.keys返回该属性(1)当我们定义一个属性时直接在一个对象上,它的默认值为true(2)当我们通过属性描述符定义一个属性时,它的默认值为false3,[[writable]]:表示该属性是否可以修改(1)当我们直接在一个对象在定义一个属性时,它的默认值为true(2)而当我们通过属性描述符定义一个属性时,它的默认值为false4、[[value]]:属性的值,当读取属性时会返回value,修改属性时修改value(1)默认情况下,value为undefined访问属性描述符:1、[[configurable]]:表示属性是否可以被delete删除,属性是否可以修改,是否可以修改访问属性(1)当我们定义直接在一个对象上的一个属性,它的默认值为true(2)当我们通过属性描述符定义一个属性时,它的默认值为false2、[[enumerable]]:表示属性是否可以通过for-in或者返回属性对象键(1)当我们直接在一个对象上定义一个属性时,它的默认值为true(2)当我们通过属性描述符定义一个属性时,它的默认值为false3、[[get]]:获取时要执行的函数属性,默认为undefined4,[[set]]:设置或修改属性值时要执行的函数,默认为undefined3,属性描述符[[writable]],[[value]]的冲突不能与[[get]]、[[set]]一起使用
