var myObject = {
            a:2
        };
        Object.getOwnpropertyDescriptor(myObject,"a");
        {
            value:2,
            writable:true,
            emumerable:true,
            configurable:true
        }

这段代码中的属性描述符不仅只有2,还有writable(可写)、enumerable(可枚举)、configurable(可配置)三种

 

在创建普通属性时属性描述符会使用默认值,我们也可以使用 Object.defineProperty(...)添加一个新属性或者修改一个已有属性(如果是configurable)并对特性进行设置

代码示例:

var myObject = {};
        Object.defineProperty(myObject,"a",{
            value:2,
            writable:true,
            configurable:true,
            emumerable:true
        });
        console.log(myObject.a);//2

 

下面是对这三个属性描述符的介绍:

1)writable:决定是否可以修改属性的值

var myObject = {};
        Object.defineProperty(myObject,"a",{
            value:2,
            writable:false,
            configurable:true,
            emumerable:true
        });
        myObject.a = 3;
        console.log(myObject.a);//2

解析:writable:false 可以看作为属性不可改变,在严格模式("use strict";)下,引擎会抛出TypeError的异常,这表示我们无法修改一个不可写的属性

 

2)configurable:只要属性是可配置的,就可以使用 defineProperty(...)方法来修改属性描述符

注意!!

a)在false情况下,如果修改,不管是不是严格模式,都会抛出TypeError的错误

b)在这种情况下,我们仍可以将可写性的状态由true改为false

c)delete属性也会被禁止(delete myObject.a;)

 

3)emumerable:可枚举,如果将它设置为false,则这个属性将不会出现在枚举中,但可以正常访问他

 

  

  

 

 

 

 

相关文章:

  • 2021-06-11
  • 2021-10-29
  • 2021-10-27
  • 2021-09-15
  • 2022-12-23
  • 2022-03-07
  • 2022-12-23
  • 2021-09-18
猜你喜欢
  • 2021-12-14
  • 2021-10-22
  • 2021-12-27
  • 2021-12-10
  • 2021-08-10
  • 2021-07-15
  • 2021-07-23
相关资源
相似解决方案