对象属性描述符的一些补充

193 阅读1分钟

引言

在我的上一篇文章里介绍过了对象属性描述符,没看过的同学可以在这里访问JS中的对象属性修饰符,全篇干货。本文是是对于对象属性描述符以及对象方法的一些补充。

获取属性描述符

如果用户希望获取某一特定属性,或者所有的属性描述符可以参考代码1

//代码1
let obj = {
    name : 'why',
    age:18,
    address:'北京' 
}

console.log(Object.getOwnPropertyDescriptor(obj,"name")); //{ value: 'why', writable: true, enumerable: true, configurable: true }
console.log(Object.getOwnPropertyDescriptors(obj));  //获取所有对象的属性描述符

不过像这种代码一般只有框架的源码才会出现。

对象方法的补充

下面是关于对象一些方法的补充

禁止对象继续添加新的属性

let obj = {
    name : 'why',
    age:18,
    address:'北京' 
}

//禁止对象继续添加新的属性
Object.preventExtensions(obj)

obj.height= 189
obj.address = '南京' 

console.log(obj);  //{ name: 'why', age: 18, address: '南京' }

禁止对象配置/禁止删除对象里面的属性

let obj = {
    name : 'why',
    age:18,
    address:'北京' 
}

Object.seal(obj)

delete obj.name  //禁止删除
console.log(obj); //{ name: 'why', age: 18, address: '北京' }

for(let key in obj){
    Object.defineProperty(obj,key,{
        configurable:false,
        enumerable:true,
    })
}  //这样是不行的,禁止配置

冻结对象,使其不能修改

这也就是使writable属性变为false

let obj = {
    name : 'why',
    age:18,
    address:'北京' 
}

Object.freeze(obj)
obj.name = 'lebro'
obj.address = '南京'
console.log(obj); //{ name: 'why', age: 18, address: '北京' }