CategoryES8如何获取Object的描述符设置描述符使用defineProperty()获取单个属性的描述符——Object.getOwnPropertyDescriptor()获取中的数据描述符所有属性——Object.getOwnPropertyDescriptors()Descriptor描述符参考可以复制getter和setter属性ES6-ES10学习布局ES8如何获取对象的描述符Object.getOwnPropertyDescriptor()只能获取对象属性的描述符,不能修改它描述符使用defineProperty()作为第一个参数,目标对象,第二个参数,目标属性(可以是Symbol),第三个参数是配置描述符,true是启用,false是禁用返回传递的目标对象constdata={Portland:'78/50',Dublin:'88/52',Lima:'58/40'}Object.defineProperty(data,'Lima',{enumerable:false,//不可枚举writable:false//不可能重写})//不可枚举的对象不会在里面console.log(Object.keys(data))//["Portland","Dublin"]获取单个属性的描述符-Object.getOwnPropertyDescriptor()获取对象属性的描述符,即目标对象的第一个参数和目标属性的第二个参数。返回值是对象及其所有描述符。如果找不到该属性,则返回undefined//可以看到单个属性的描述符console.log(Object.getOwnPropertyDescriptor(data,'Lima'))//{value:"58/40",writable:false,enumerable:false,configurable:true}获取所有属性中的数据描述符-Object.getOwnPropertyDescriptors()只接受一个参数,target。//你可以在所有属性中看到数据描述符console.log(Object.getOwnPropertyDescriptors(data))//Portland:{value:"78/50",writable:true,enumerable:true,configurable:true}//Dublin:{value:"88/52",writable:true,enumerable:true,configurable:true}//Lima:{value:"58/40",writable:false,enumerable:false,configurable:true}描述符关于数据描述符集及其含义。描述符备注value[属性的值]writable[属性的值是否可以改变]enumerable[属性的值是否可以枚举]configurable[描述符本身是否可以修改,属性是否可以删除]get[获取属性的访问器函数(getter)。如果没有访问器,则该值未定义。]set[获取属性的设置函数(setter)。如果没有setter,则值为undefined]DescriptorreferenceObject.definePropertyMDNObject.getOwnPropertyDescriptorMDN可以复制getter和setter属性使用Object.assign不复制getter和setter的内容constp1={firstName:'Lei',lastName:'Wang',getfullName(){returnthis.firstName+''+this.lastName}}constp2=Object.assign({},p1)p2.firstName='Xiao'console.log(p2)//{firstName:'Xiao',lastName:'Wang',fullName:'LeiWang'}//这里get的内容没改,因为Object.assign只是获取fullName作为一个普通变量。如果想全部获取,那么需要做这个constdescriptors=Object.getOwnPropertyDescriptors(p1)console.log(descriptors)/**获取所有的描述信息,然后定义在一个新的对象上,这样全部可以复制{firstName:{value:'Lei',writable:true,enumerable:true,configurable:true},lastName:{value:'Wang',writable:true,enumerable:true,configurable:true},fullName:{get:[函数:getfullName],set:undefined,enumerable:true,configurable:true}}*/constp3=Object.defineProperties({},descriptors)p3.firstName='Hu'console.log(p3.fullName)//胡网ES6-ES10学习布局
