Object 属性描述符

刺骨的言语ヽ痛彻心扉 2023-07-20 12:23 76阅读 0赞

属性描述符是一个普通的对象中用来描述属性的相关信息。


Object.getOwnPropertyDescriptor() 返回指定属性描述符

返回对象的key属性的属性描述

  1. const obj = {
  2. a: 1,
  3. b: 2
  4. }
  5. console.log(Object.getOwnPropertyDescriptor(obj, 'a'))

在这里插入图片描述


























属性 描述
value 属性值
configurable 该属性是否可以被属性描述符修改
enumerable 是否可以枚举
writable 是否可以重新赋值

Object.getOwnPropertyDescriptors() 返回全部属性描述符

  1. const obj = {
  2. a: 1,
  3. b: 2
  4. };
  5. console.log(Object.getOwnPropertyDescriptors(obj))

在这里插入图片描述


Object.defineProperty() 修改某个属性描述符

  1. const obj = {
  2. a: 1,
  3. b: 2
  4. };
  5. Object.defineProperty(obj, "a", {
  6. value: 10,
  7. configurable: false,
  8. enumerable: false,
  9. writable: false
  10. })

当然也可以使用 Object.defineProperties() 同时修改多个。

  1. Object.defineProperties(obj, {
  2. a: {
  3. value: 10,
  4. configurable: false,
  5. enumerable: false,
  6. writable: false
  7. },
  8. b: {
  9. value: 10,
  10. configurable: false,
  11. enumerable: false,
  12. writable: false
  13. }
  14. })

其中 value 修改属性值。

  1. console.log(obj)
  2. // {b: 2, a: 10}

configurable 是否可以被属性描述符修改。

当设置为 false 后,不能再进行修改属性描述符,当属性描述有一项尝试修改时会报错。

  1. Object.defineProperty(obj, "a", {
  2. value: 10, //
  3. configurable: false,
  4. enumerable: false,
  5. writable: false
  6. })
  7. Object.defineProperty(obj, "a", {
  8. value: 100, //
  9. configurable: true,
  10. enumerable: true,
  11. writable: true
  12. })
  13. // TypeError

enumerable 是否可以枚举

  1. Object.defineProperties(obj, {
  2. a: {
  3. enumerable: false
  4. },
  5. b: {
  6. enumerable: false
  7. }
  8. })
  9. for (const prop in obj) {
  10. console.log(prop)
  11. }
  12. // 无输出

writable 是否可以重新赋值

  1. const obj = {
  2. a: 1,
  3. b: 2
  4. };
  5. Object.defineProperty(obj, "a", {
  6. writable: false
  7. })
  8. obj.a = 100;
  9. console.log(obj)
  10. // {a: 1, b: 2}

Object.defineProperty()中的储存器get()set()方法,设置属性值是触发set()方法,获取属性值是触发get()方法。

  1. Object.defineProperty(obj, 'a', {
  2. get() {
  3. console.log('查看了a属性');
  4. },
  5. set(val) {
  6. console.log('设置了a属性', val);
  7. }
  8. })
  9. obj.a = 10; // 设置了 a 属性
  10. console.log(obj.a); // 查看了 a 属性

此时obj.a的值为undefined
在这里插入图片描述在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,76人围观)

还没有评论,来说两句吧...

相关阅读

    相关 JS对象属性描述符对象

    JS中Object对象的静态方法getOwnPropertyDescriptor可以返回指定对象的指定属性的描述,该描述是一个对象,称为属性描述符对象。属性描述符是 ECMAS