属性描述
Object.defineProperty(obj,prop,descriptor)
//obj要定义属性的对象,
//prop要定义或修改的属性的名称或Symbol,
//descriptor要定义或修改的属性描述符
方法会直接在对象上定义一个新属性,或者修改一个对象的相应属性,并返回此对象。
数据描述符
[[Configurable]]
//当直接在一个对象上定义某个属性时,此属性的[[Configurable]]为true;
//当我们通过属性描述符定义一个属性时,这个属性的[[Configurable]]默认为false
表示属性是否可以通过delete
删除属性,是否可以修改的它的特性,或者是否可以将它修改为存取属性描述符。
let obj ={
name:'why',
age:18,
}
Object.defineProperty(obj,'name',{
configurable:false,
})
delete obj.name;//此处的name没有被删除
[[Enumerable]]
//当直接在一个对象上定义某个属性时,此属性的[[Enumerable]]为true;
//当我们通过属性描述符定义一个属性时,这个属性的[[Enumerable]]默认为false
表示属性是否可以通过for-in
或者Object-keys()
返回属性;
[[Writable]]
//当直接在一个对象上定义某个属性时,此属性的[[Writable]]为true;
//当我们通过属性描述符定义一个属性时,这个属性的[[Writable]]默认为false
表示是否可以修改属性的值;
存取属性描述符
监听获取和设置对象属性时,执行回调函数。
Object.defineProperty(obj,"name",{
set:function(value){
},
get:function(){
}
})
多个属性进行描述时
Object.defineProperties(obj,{
name:{
configurable:false,
},
age:{
writable:false;
}
})
获取对象属性、属性描述符
Object.getOwnPropertyDescriptors(obj)//获取对象属性描述符
Object.getOwnPropertyNames(obj)//获取对象属性名
//阻止扩展
Object.preventExtensions(obj)
//密封对象(不能进行配置)
Object.seal(obj)
//冻结(不能进行修改)
Object.freeze(obj)
- 本文链接:https://archer-lan.github.io/2023/11/20/%E5%B1%9E%E6%80%A7%E6%8F%8F%E8%BF%B0/
- 版权声明:本博客所有文章除特别声明外,均默认采用 许可协议。