Object.defineProperty方法总结

1. 定义属性的两种形式

//1
var obj = {};
obj.name = 'ming';

//相当于
Object.defineProperty(obj,'name',{
    value : 'ming',
    writable: true,
    configurable: true,
    enumerable: true
})

//2
Object.defineProperty(obj,'name',{value: 'ming'})

//相当于
Object.defineProperty(obj,'name',{
    value: 'ming',
    writable: false,
    configurable: false,
    enumerable: false
})

2. defineProperty描述符

2.1 value 属性值
2.2 writable 是否可以修改
2.3 configurable 是否可配置,是否可删除

1. 是否可配置

Object.defineProperty(obj,'name',{configurable:false})

//再次配置描述符中的任何一个,包括value,都会报错
Object.defineProperty(obj,'name',{...}) //Cannot redefine property: name

2. 是否可删除

Object.defineProperty(obj,'name',{configurable:false})

delete obj.name //返回false

2.4 enumerable  是否可枚举

是否可以在 for...in 或 Object.keys() 中遍历

3. 设置只读属性

Object.defineProperty(obj,'name',{writable:false})

//只是设置writable为false,当configurable为true,同样可以通过
Object.defineProperty(obj,'name',{value:'xxx'})修改值

//只读设置应该是
Object.defineProperty(obj,'name',{writable:false,configurable:false})
原文地址:https://www.cnblogs.com/mengff/p/12812293.html