美文网首页
对象的属性描述符

对象的属性描述符

作者: Ronswhite | 来源:发表于2019-06-14 17:27 被阅读0次

Javascript描述符

属性描述符

  • value
  • writable
  • enumerable
  • configurable

属性访问描述符(访问器)

  • setter
  • getter

属性描述符的使用

var obj = {
    key: "hello"
}

// 查看obj的属性key的属性描述符
console.log(Object.getOwnPropertyDescriptor(obj, "key")); //{value: "value", writable: true, enumerable: true, configurable: true}

// 设置obj的属性key的属性描述符
Object.defineProperty(obj, "key", {
    value: "newVal",    // 设置属性的值
    writable: false,    // 设置属性是否可写
    enumerable: true,   // 设置属性是否可枚举(可用for ... in ...遍历)
    configurable: true  // 设置属性是否可配置(可用defineProperty设置)及删除(delete key)
});

//设置常量属性
Object.defineProperty(obj, "key", {
    writable: false,
    configurable: false
});

阻止对象扩展

var obj = {
    a: 6
};

//阻止对象扩展 
Object.preventExtensions(obj);

obj.b = 999;    //b无法被添加
console.log(obj);   //{a: 6}

密封对象

Object.seal(obj);
相当于Object.preventExtensions(obj);及对obj对象的所有属性的属性描述符configurable改成false
即:对象不能添加和删除属性。

冻结对象

Object.freeze(obj);
相当于
Object.seal(obj);及对obj对象的所有属性的属性描述符writable改成false
即对象不能添加和删除属性,也不能修改属性的值。

属性访问描述符

访问描述符有两种定义方式

var obj = {
    set a(val) {
        console.log("setting a...");
        this._a_ = val * 2;
    },
    get a() {
        console.log("getting a...")
        return this._a_;
    }
};

Object.defineProperty(obj, "b", {
    set: function(val) {
        console.log("setting b...");
        this._b_ = val;
    },
    get: function() {
        console.log("getting b...");
        return this._b_;
    }
});
obj.a = 2;  //setting a...
obj.b = 3;  //setting b...
obj.a;      //getting a...
obj.b;      //getting b...
设置了访问器的对象

给对象定义属性访问描述符会在对象中创建不包含值的属性,对这个属性的访问会自动调用隐藏的函数(访问器getter和setter)

相关文章

  • 定义一个变量

    属性描述符(Property Descriptors) 我们普通的对象属性a的属性描述符(称为“数据描述符”,因为...

  • Object.defineProperty方法

    对象的属性在创建的时候,都会带有属性描述符,分为数据描述符和存取描述符 数据描述符是具有值的属性,改属性值可能可写...

  • Object.defineProperty()

    作用 直接在对象上定义或者修改属性 通过描述符的设置可以精准的控制对象的属性 为对象定义属性有两种方式:属性描述符...

  • python中描述符的学习

    什么是描述符 描述符是Python新式类的关键点之一,它为对象属性提供强大的API,你可以认为描述符是表示对象属性...

  • js 对象属性描述符

    ECMAScript对象中⽬前存在的属性描述符主要有两种,数据描述符(数据属性)和存取描述符(访问器属性),数据描...

  • 2019-09-08 理解 数据描述符和存取描述符

    对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。 我们可以理解 属性描述符 为用来描述一个属性的...

  • 如何让对象属性不可配置或枚举

    一、什么是属性描述符? MDN: 对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。 数据描述符是...

  • 如何让对象属性不可配置或枚举

    一、什么是属性描述符? MDN: 对象里目前存在的属性描述符有两种主要形式:数据描述符和存取描述符。 数据描述符是...

  • js基础之对象

    修改对象 先介绍下:Object.defineProperty(对象, 属性, 描述符) 数据描述符: value...

  • 对象的属性描述符

    从ES5开始,对象的每一个属性都具备了属性描述符。 对u象的属性描述符是真的常见,这里就简要概括一下吧。对象的属性...

网友评论

      本文标题:对象的属性描述符

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