继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

初步认识JavaScript对象属性的特性

carefree_
关注TA
已关注
手记 6
粉丝 3
获赞 53

对象的属性可分为:1、数据属性;2、存取器属性;
数据属性有以下特性:1、值(value),2、可写(writable),3、可枚举(enumerable),4、可配置(configurable)
存取器属性有以下特性:1、读取(get),2、写入(set),3、可枚举(enumerable),4、可配置(configurable)
通过Object.getOwnPropertyDescriptor()获取对象的属性的特性描述符,第一个参数是对象,第二个参数是属性,
通过Objec.defineProperty()设置属性的特性,第一个参数是该对象,第二个参数是属性,第三个参数是属性描述符对象
Object.defineProperty()要么修改属性的特性,要么创建一个属性,在属性描述符中不必须全部传入的属性的特性,没有传入的特性默认为false或undefined
通过for/in枚举属性,
第三个参数属性描述符对象不必须传入四个参数,没有传入的特性默认为false或undefined

        var obj={
            "y":-1,
            "m":"zhang"
        };
        //添加一个属性x,值为1,可配置,不可枚举,不可写
        Object.defineProperty(obj,"x",{
            configurable:true,
            enumerable:false,
            value:1
        })
        obj.x=0;
        obj.x;  //返回1,writable没有描述,默认为false
        Object.defineProperty(obj,"x",{
            value:0
        });
        obj.x;   //返回0,有于fonfigurable为true,可配置,
        obj.propertyIsEnumerable("x"); //返回false,属性是自身属性且可枚举的吗?不可枚举
        var arr=[];
        for (attrs in obj){
            arr.push(attrs);
        }
        arr.length; //仅枚举到属性y,x不可枚举
        console.log(Object.getOwnPropertyDescriptor(obj,"x"));//获取obj对象中x属性的特性描述符
        console.log(Object.getOwnPropertyDescriptor(obj,"y"));//普通创建的属性的特性:可写,可枚举,可配置。
        //Object.defineProperties()可以同时设置或创建多个属性,第一个参数是对象,第二个参数是一个对象映射表
        Object.defineProperties(obj,{
            z:{value:-2,writable:false,enumerable:false,configurable:false},
            e:{value:-3,numerable:true},
            m:{value:"yang"},
            f:{value:"yang",writable:true,enumerable:true,configurable:true}
        });
        obj.f="zhang";
        obj.f; //返回zhang
        obj.m;//返回yang
        Object.defineProperty(obj,"e",{ //属性不可配置时,不可以修改属性的可枚举性
            //writable:false,
            //numerable:true
            value:5
            //numerable:true
        });
        obj.e=3;
        alert(obj.e);
        //alert(obj.propertyIsEnumerable("e"));
打开App,阅读手记
2人推荐
发表评论
随时随地看视频慕课网APP