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是不可枚举的。
所以说,属性描述符只是对于对象属性的一种描述,来限制一些操作的。