对象属性特性介绍

作者: 曲昶光 | 来源:发表于2021-09-07 13:03 被阅读0次

    一、对象属性由下面特性组成的:

    value
    该属性的值(仅针对数据属性描述符有效)
    writable
    当且仅当属性的值可以被改变时为true。(仅针对数据属性描述有效)
    get
    获取该属性的访问器函数(getter)。如果没有访问器, 该值为undefined。(仅针对包含访问器或设置器的属性描述有效)
    set
    获取该属性的设置器函数(setter)。 如果没有设置器, 该值为undefined。(仅针对包含访问器或设置器的属性描述有效)
    configurable
    当且仅当指定对象的属性描述可以被改变或者属性可被删除时,为true。
    enumerable
    当且仅当指定对象的属性可以被枚举出时,为 true。

    二、属性分为两种类型:1数据属性 2访问器属性。

    1.怎样知道这个属性到底是数据属性还是访问器属性?
    利用Object.getOwnPropertyDescriptor(obj,“属性名”)获取一个对象的属性的特性,该方法会返回一个对象,

    当是访问器属性时,该对象属性有enumerable,configurable,get,set。
    当是数据属性,该对象属性有value,writable,enumerable,configurable。

    //数据属性
    const object1 = {
      property1: 42
    };
    
    const descriptor1 = Object.getOwnPropertyDescriptor(object1, 'property1');
    
    console.log(descriptor1);//Object { value: 42, writable: true, enumerable: true, configurable: true }
    
    //访问器属性
    const descriptor2=Object.getOwnPropertyDescriptor(window,'name')
    console.log(descriptor2);//Object { get: function get name() { [native code] }, set: function set name() { [native code] }, enumerable: true, configurable: true }
    

    三、修改或添加对象属性特性

    Object.defineProperty() 方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回此对象。

    //添加数据属性
    const object1 = {};
    
    Object.defineProperty(object1, 'property1', {
      value: 42,
      writable: true
    });
    
    object1.property1 = 77;
    
    console.log(object1.property1);//77
    
    //添加访问器属性
    const object2 = {};
    Object.defineProperty(object2,'haha',{
    get(){
    return 22
    }
    })
    console.log(object2.haha);//22
    

    相关文章

      网友评论

        本文标题:对象属性特性介绍

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