js对象属性

作者: 青色琉璃 | 来源:发表于2019-07-09 10:52 被阅读0次

    数据属性

    • [[Enumerable]]:是否可遍历,也就是是否可以通过for-in找到该属性,默认为true
    • [[Writable]]:是否可修改,默认为true
    • [[Value]]:属性值,默认undefined
      [[Configuarble]]:表示能否通过delete属性从而重新定义属性,能否修改属性的特征,总的来说就是是否允许修改属性,默认值为true
    var obj = {
        age:20,
        name:'ming'
    }
    // 对于直接在字面量中定义的属性,configurable,writable,enumerable属性都是true
    
    // 对于在defineProperty中定义的属性,configurable,writable,enumerable属性都是false
    Object.defineProperty(obj,'name',{
        writable:false,   // 不写也没关系,反正都是false
        configurable:true,
        value:'dong'
    })
    console.log(obj.name)   // dong
    obj.name="wei";
    console.log(obj.name)   //dong,因为不能修改
    
    console.log(Object.getOwnPropertyDescriptor(obj,'name'))  // 查看属性
    
    delete obj.name;
    console.log(obj)   //{name:20}  name属性被删除了
    
    console.log(Object.getOwnPropertyDescriptor(obj,'name'))  // undefined,没有name属性了
    

    访问器属性

    var person = {
        _year:2010,
        age:0,
    }
    // 这里year必须要用_year来保存自己的值,否则在get中获取自身的值,会一直循环
    Object.defineProperty(person,'year',{
        get:function(){
            console.log('get')
            return this._year;
        },
        set:function(newYear){
            if(newYear>this._year){
                console.log('set')
                this.age=newYear-this._year;
                this._year = newYear;
                return this.age;
            }
            
        },
        configurable:false
    })
            
    person.year = 2019;
    console.log(person.age);    // set 9
    console.log(person.year);   // get 2019
    

    相关文章

      网友评论

        本文标题:js对象属性

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