美文网首页
对象属性特性

对象属性特性

作者: 萌琦琦de诗扬 | 来源:发表于2018-09-03 10:11 被阅读0次

    1. 对象属性特性

    • 对象由属性组成。属性创建时会带有一些特征值,用来描述属性。
    • 根据对象属性特性,属性分两种——数据属性与访问器属性
    var person = {
        name = 'Emily'
    }
    

    2. 数据属性

    包含数据值,value

    1. 数据属性4个特性
      • configurable 能否修改属性特征,能否通过delete删除,能否转化为访问器属性
      • enumerable 能否通过for-in遍历
      • writable 能否修改属性值
      • value 属性数据值
    2. Object.defineProperty(对象,属性,{特征名:特征值}) 修改属性特性
    var person = {};
    Object.defineProperty(person, 'name', {
        writable: false,
        value: 'A'
    })
    
    alert(person.name)   //A
    person.name = 'B'
    alert(person.name)   //B
    
    • 通过Object.defineProperty()创建的属性,configurable默认值为false。且,configurablefalse后,永远是false
    • 通过对象创建的属性,configurable enumerable writable默认都为true

    3. 访问器属性

    不包含数据值,通过get set访问属性。且必须通过Object.defineProperty()创建访问器属性

    1. 访问器属性4个特性
      • configurable (同数据属性)
      • enumerable (同数据属性)
      • get 读取属性时调用的函数
      • set 写入属性时调用的函数
    2. 通过Object.defineProperty()创建访问器属性
    var obj = {
        a: 2,
        b: 4
    }
    
    Object.defineProperty(obj, 'c', {
        get: function() {
            return this.a
        },
        set: function(newA) {
            this._a = newA
            this.b = this.b + newA
        }
    })
    
    obj.c = 3
    alert(obj.b)  //7,  修改访问器属性值,有可能使其他属性改变
    

    只定义get,访问器属性只可读;只定义set,访问器属性只可写。

    4. 定义多个属性

    通过Object.defineProperties定义多个属性特性,语法:

    Object.defineProperties(对象,{
        属性名: {
            特征名: 特征值,
            特征名: 特征值
        },
        属性名: {
            特征名: 特征值,
            特征名: 特征值
        }
    })
    

    5. 读取属性特性

    通过Object.getOwnPropertyDescriptor(对象,属性)方法,读取属性特征对象。

    var o = Object.getOwnPropertyDescriptor(person,'name')
    alert(o.writable)   //false
    

    相关文章

      网友评论

          本文标题:对象属性特性

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