美文网首页
原来对象的属性也设置和修改(Object.definePrope

原来对象的属性也设置和修改(Object.definePrope

作者: 小李不小 | 来源:发表于2020-09-17 09:48 被阅读0次

    其实对象也有自己空间,他也可以设置修改开关等,下面我们来看看

    添加和修改,删除对象属性这个很简单了
    var obj={
    name:'哈哈'
    }
    
    obj.age="19" //结果 var obj={name:'123',age:"19" } 添加属性
    obj.name="123" //结果 var obj={name:'123'} 修改属性
    delete obj.name //结果 var obj={ } 修改属性
    

    我们想限制添加和修改,删除对象属性,这个时候我们该怎么办,我们能做到吗?

    自信点,我们可以做到,使用下面这两个方法

    1 Object.getOwnPropertyDescriptor法返回指定对象上一个自有属性对应的属性描述符。
    2 Object.defineProperties 添加一个/多个属性到对象;修改已有属性

    Object.getOwnPropertyDescriptor法返回指定对象上一个自有属性对应的属性描述符。
    const user={
        name:'后盾人',
        age:18
    }
    
    
    // Object.getOwnPropertyDescriptor法返回指定对象上一个自有属性对应的属性描述符。
    console.log(Object.getOwnPropertyDescriptor(user,'name'))
    
    

    value 后盾人 属性值
    writable 修改属性 是true 否 false
    enumerable 是否能便利 是true 否 false
    configurable 是否能删除 是true 否 false


    image.png

    2 Object.defineProperties 添加一个/多个属性到对象;修改已有属性

    const user={
        name:'后盾人',
        age:18
    }
    
    
    // Object.getOwnPropertyDescriptor法返回指定对象上一个自有属性对应的属性描述符。
    console.log(Object.getOwnPropertyDescriptor(user,'name'))
    
    /*
    Object.defineProperties 添加一个/多个属性到对象;修改已有属性
    
    writable 修改属性 是true 否 false
    enumerable 是否能便利   是true 否 false
    configurable  是否能删除  是true 否 false
    */
    Object.defineProperties(user,{
        name:{
                value:"zzling", //设置该属性的初始值
                writable:true, //设置可修改性
                enumerable:true, //设置可枚举性
                configurable:true,  //设置可设置性
        },
       setNameWarming:{
            set:function(newVal){
            console.log("警告:有人试图用setNameWarming 访问器属性设置name 的值为"+newVal)
            },
                                  
            get:function(){
                return this.name
             },
        enumberable:true,
        configurable:true
        }
    })
    
    user.name='2222'
    user.setNameWarming="lingggggg" 
    
    console.log('user',user)
    

    看下面图片, writable:true, 设置可修改性设置为可修改,我们修改属性,对象name是不是改变了

    image.png

    我们 把 writable:false, 设为false

    const user={
        name:'后盾人',
        age:18
    }
    
    Object.defineProperties(user,{
        name:{
                value:"后盾人", //设置该属性的初始值
     writable:false, //设置可修改性
                enumerable:false, //设置可枚举性
                configurable:false,  //设置可设置性
        },
       setNameWarming:{
            set:function(newVal){
            console.log("警告:有人试图用setNameWarming 访问器属性设置name 的值为"+newVal)
            },
                                  
            get:function(){
                return this.name
             },
        enumberable:true,
        configurable:true
        }
     
    
    
    })
    
    user.name='2222'
    user.setNameWarming="lingggggg" 
    

    看图片 结果属性名字 是不是修改不了


    image.png

    剩余两个我就没试了,给你们留一点想象的空间,其实原理是一样的,false就不能设置了

    enumerable 是否能便利   是true 否 false
    configurable  是否能删除  是true 否 false
    

    相关文章

      网友评论

          本文标题:原来对象的属性也设置和修改(Object.definePrope

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