代码改变世界

JS属性描述符

2017-04-18 12:44  心猿意‘码’  阅读(1244)  评论(0编辑  收藏  举报
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,则这个属性将不会出现在枚举中,但可以正常访问他