es6中object

Descriptor

對象裏目前存在的屬性描述符有兩種主要形式:數據描述符和存取描述符。描述符必須是兩種形式之一;不能同時是兩者。

數據描述符和存取描述符均具有以下可選鍵值:

  • configurable:對象的屬性是否可以刪除,以及除writable特性外的其它特性是否可以被修改.默認false
  • enumerable:對象的屬性是否可以枚舉,目前有四個操作會忽略該值爲false的屬性,for...in,Object.keys(),JSON.stringify(),Object.assign(),其中只有for in會返回原型上的屬性,其它只處理本身的屬性。默認false

    數據描述符具有以下可選鍵值:

  • value:該屬性對應的值,可以是任何有效的js值,默認undefined

  • writable:該屬性是否能被=改變值,默認false

    存取描述符具有以下可選鍵值:

  • get給屬性提供getter方法,默認undefined

  • set給屬性提過setter方法,默認undefined
let newObj = Object.create(null,
    {bar:{
        get:function(){return this._bar},
        set:function(param){this._bar = param},
        enumerable:true
        }
        });
        newObj.bar = "abc";
        for(let i in newObj){
            console.log("變量名:",i,"變量值:",newObj[i]);
        }

結果:
這裏寫圖片描述
如果去掉enumerable:true,那麼就只有_bar,因爲bar是不可枚舉的。

所以說,屬性描述符只是對於對象屬性的一種描述,來限制一些操作的。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章