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是不可枚舉的。
所以說,屬性描述符只是對於對象屬性的一種描述,來限制一些操作的。