美文网首页
Object.defineProperty()

Object.defineProperty()

作者: 取个帅气的名字真好 | 来源:发表于2018-09-17 17:46 被阅读25次

    Object.defineProperty()方法会直接在一个对象上定义一个新属性,或者修改一个对象的现有属性,并返回这个对象。

    var obj = {a:1,b:2}
    Object.defineProperty(obj,'xxx',{
        get(){}, //读
        set(value){} //写
    })
    

    只读不能写

    var undefined = 1
    undefined //undefined
    

    能读能写

    var o = {
     name:'苏宋霖'
    }
    o.name //"苏宋霖"
    o.name = '李四' //"李四"
    o.name //"李四"
    

    只读不能写。

    只用get

    var o = {
        get name(){return '苏宋霖'} //只写get,不写set。表示只读不写
    }
    o.name //"苏宋霖"
    o.name = '李四' //"李四"
    o.name //"苏宋霖"
    

    只读不能写

    writable:
    默认为false。
    为'false',表示不可写。
    为'true',表示可写的。

    value:属性对应的值。

    var o = {}
    Object.defineProperty(o,'name',{
        writable:false, //writable属性设置为false时,该属性被称为“不可写
        value:'苏宋霖' //name的默认值
    })
    o.name //"苏宋霖"
    o.name ='李四' //"李四"
    o.name //"苏宋霖"
    

    让不可写变成可写

    var o = {
        name:'苏宋霖'
    }
    Object.defineProperty(o,'name',{writable:false})
    o.name //"苏宋霖"
    o.name = '李四' //"李四"
    o.name //"苏宋霖"
    
    Object.defineProperty(o,'name',{writable:true})
    o.name //苏宋霖
    o.name = '李四' //"李四"
    o.name //"李四"
    

    configurable 对象的属性是否可以被删除,以及除writable特性外的其他特性是否可以被修改。

    var o = {}
    Object.defineProperty(o,'name',{
        configurable:false,
        value:'苏宋霖'
    })
    
    //报错
    Object.defineProperty(o,'name',{ configurable:true })
    //报错
    Object.defineProperty(o,'name',{value:'李四'})
    //报错
    Object.defineProperty(o, "name", {enumerable : true}); 
    //报错
    Object.defineProperty(o, "name", {set : function(){}}); 
    //报错
    Object.defineProperty(o, "name", {get : function(){return xxxx;}});
    
    
    

    enumerable 不可枚举属性

    var o = {a:1,c:3}
    Object.defineProperty(o,'b',{value:2,enumerable:false})
    //{a: 1, c: 3, b: 2}
    
    for(let key in o){console.log(key)}
    //a
    //c
    console.log(o)
    //{a: 1, c: 3, b: 2}
    

    批量操作

    Object.defineProperties

    var o = {}
    Object.defineProperties(o,{
        a:{value:'1111',writable:false},//a默认值是1111,不可修改
        b:{value:'2222',writable:true}//b默认值是2222,可修改
    })
    o //{a: "1111", b: "2222"}
    o.a //"1111"
    o.a = '333' //"333"
    o.a //"1111"
    o.b  //"2222"
    o.b = '444' //"444"
    o.b //"444"
    

    相关文章

      网友评论

          本文标题:Object.defineProperty()

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