美文网首页
Object.defineProperty()

Object.defineProperty()

作者: skoll | 来源:发表于2022-06-17 10:31 被阅读0次

简介

1 .直接在一个对象上定义一个新属性或者修改一个对象的现有属性
2 .通过赋值操作添加的属性通常是可以枚举的,会被for in,Object.keys

语法

Object.defineProperty(obj,prop,descriptor)
1 .obj:要定义属性的对象
2 .要定义的对象或者修改的属性
3 .要定义或者修改的属性描述符

1 .默认添加的属性不能被枚举,不能被删除,值是undefined
 const obj = {};
 Object.defineProperty(obj, 'age', {})
//这样给一个对象添加了属性,这个属性不能被修改,不能被遍历,不能被删除.默认值是undefined

2 .configurable:true.属性的描述符才能被改变,属性可以被删除.默认是false.除 value 和 writable 特性外的其他特性是否可以被修改.感觉是一个总的锁.当为false的时候,可以被复制,不报错,但是不会成功
3 .wriable:true.value才能被赋值运算符改变.如果原型对象的某个属性的writable为false,那么子对象将无法自定义这个属性,writable属性只能从true改为false,反着来是会报错的.
4 .enumerable:返回一个布尔值,表示目标属性在for in Object.keys,JSON.stringify中是否可以遍历

4 .属性的值value,只要writable,configure一个是true,就允许改动
5 .注意:这些属性不一定是自身属性,有的时候也要考虑继承来的属性.
6 .修改属性:如果属性已经存在的话,Object.defineProperty将尝试根据描述符中的值以及对象当前的配置来修改这个属性.如果旧属性的描述符将其configureable属性设置为false.改属性被认为是不可配置的,并且没有属性可以被改变,除了单独改变wirtable为false.
7 .当视图改变不可配置属性的值时,会报错typeerror,除了value,writable值,除非和之前的值相同.

总结

1 .使用点运算符和Object.defineProperty为对象的属性赋值,数据描述符中的属性默认值是不同的.默认全是true

var o = {};

o.a = 1;
// 等同于:
Object.defineProperty(o, "a", {
  value: 1,
  writable: true,
  configurable: true,
  enumerable: true
});

相关文章

网友评论

      本文标题:Object.defineProperty()

      本文链接:https://www.haomeiwen.com/subject/qemxvrtx.html