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)当我们定义一个property通过属性描述符,它的默认值为false3,[[writable]]:表示该属性是否可以修改(1)当我们直接在一个对象上定义一个属性时,它的默认值为true(2)当我们通过属性描述符定义一个属性,它的默认值为false4,[[value]]:属性的值,读取属性时会返回值,修改属性时会修改值(1)默认情况下,value是undefinedaccessattributedescriptor:1,[[configurable]]:表示属性是否可以delete删除,属性是否可以修改,是否可以修改访问属性(1)当我们直接在一个对象上定义一个属性时,它的默认valueistrue(2)当我们通过属性描述符定义一个属性时,它的默认值为false2,[[enumerable]]:表示属性是否可以通过for-in或者Object.keys返回属性(1)当我们直接在一个对象上定义一个属性时,它的默认值为true(2)当我们通过属性描述符定义一个属性时,它的默认值为false3、[[get]]:获取时要执行的函数属性,默认为undefined4,[[set]]:设置或修改属性值时要执行的函数,默认为undefined3,属性描述符[[writable]],[[value]]的冲突不能与[[get]]、[[set]]一起使用
