Object.defineProperty() 和 Object.getOwnPropertyDescriptor()

来源:互联网 发布:淘宝买快排精密管安全 编辑:程序博客网 时间:2024/06/06 19:24
//Object.defineProperty() 和 Object.getOwnPropertyDescriptor()//Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性, 并返回这个对象。let obj = {};Object.defineProperty(obj,'prop1',{value:'789',enumerable: true});console.log(obj);//{ prop1: '789' }Object.defineProperties(obj,{'prop2':{value:'123',enumerable:true},'prop3':{value:'456',enumerable:true}});console.log(obj);//{ prop1: '789', prop2: '123', prop3: '456' }//Object.getOwnPropertyDescriptor() 方法返回指定对象上一个自有属性对应的属性描述符// 该方法允许对一个属性的描述进行检索。在 Javascript 中, 属性 由一个字符串类型的“名字”(name)和一个“属性描述符”(property descriptor)对象构成。更多关于属性描述符类型以及他们属性的信息可以查看:Object.defineProperty./*一个属性描述符是一个记录,由下面属性当中的某些组成的:value该属性的值(仅针对数据属性描述符有效)writable当且仅当属性的值可以被改变时为true。(仅针对数据属性描述有效)get获取该属性的访问器函数(getter)。如果没有访问器, 该值为undefined。(仅针对包含访问器或设置器的属性描述有效)set获取该属性的设置器函数(setter)。 如果没有设置器, 该值为undefined。(仅针对包含访问器或设置器的属性描述有效)configurable当且仅当指定对象的属性描述可以被改变或者属性可被删除时,为true。enumerable当且仅当指定对象的属性可以被枚举出时,为 true。*/const prop1 = Object.getOwnPropertyDescriptor(obj,'prop1');console.log(prop1);/*输出指定属性的属性描述符 没有显示定义的属性描述符默认为 false{ value: '789',  writable: false,  enumerable: true,  configurable: false }*/const props = Object.getOwnPropertyDescriptors(obj);console.log(props);/*输出所有属性的属性描述符{ prop1:    { value: '789',     writable: false,     enumerable: true,     configurable: false },  prop2:    { value: '123',     writable: false,     enumerable: true,     configurable: false },  prop3:    { value: '456',     writable: false,     enumerable: true,     configurable: false } }*/