ES5_1、属性的描述对象和defineProperty函数

属性的描述对象

描述对象指的是:通过Object.create方法或者使用{}创建对象时,属性的描述的结构,也就是用来描述属性的对象,这个对象里面包括了属性的值和属性的一些特性。如:

        //第一个参数是原型对象,第二个参数是描述对象,也就是这个对象的属性。
        let obj=Object.create(null,{
            hello:{
                //设置hello属性的值
                value:"哈喽",
                //设置属性特性,比如:
                writable:true,//是否可写
                configurable:true,//是否可以删除
                enumerable:true//是否可以枚举
            },
            sayHi:{
                value:function(){console.log("嗨~")}
            }
        });

        console.log(obj.hello);
        obj.sayHi();

image

Object.defineProperty();

给对象添加属性,第一个参数:要给谁添加属性,第二个参数:属性值。第三个参数:属性的描述对象。通过这个方法添加的属性不可以枚举(也就是不可以被遍历),除非在配置对象里进行了设置。

        let person={
            name:"张三",
            age:18
        }

        let change="男";

        Object.defineProperty(person,"sex",{
            //value:"男",
            enumerable:true,//设置该属性是否可以枚举
            //writable:true,//设置属性值是否可以修改
            configurable:true,//设置属性是否可以被删除

            //有get配置项存在则不能有value、writable等配置项存在
            get:function(){//当sex属性被读取的时候get函数(get函数一般叫getter)就会被调用,返回值就作为该sex属性的属性值。
                console.log("有人读取了sex属性");
                return change;
            },
            set:function(value){//当修改了sex属性的值时,set函数(setter)就会被调用,且参数就是修改的值。
                console.log("有人修改了sex属性,且修改的值为:"+value);
                change=value;
            }            
        });

        console.log(person);
posted @ 2022-04-01 15:00  青仙  阅读(42)  评论(0编辑  收藏  举报