ECMAscript中有两种属性: 数据属性和访问器属性
数据属性有4个描述其行为的特性
[[configurable]]: 表示能否通过delete删除属性, 或者能否把属性修改为访问器属性
[[enumerable]]: 表示能否通过for-in 循环返回属性
[[writable]]: 表示能否修改属性的值
[[value]]: 包含这个属性的数据值,读取属性值的时候,从这个位置读; 写入属性值的时候,把新值保存在这个位置,这个特性的值默认为undefined
var obj = {};
Object.defineProperty(obj,'name',{
writable: false, // 不可修改该属性值
value: 'zs',
})
obj.name = 'ls'
console.log(obj); // zs
var obj = {};
Object.defineProperty(obj,'name',{
configurable: false, // 不可删除该属性
value: 'zs',
})
delete obj.name
console.log(obj); // zs
一旦把属性定义为configurable(不可配置) 就不能把它变回可配置了, 此时再调用Object.defineProperty()方法修改除writable之外的特性,都会导致错误
var obj = {};
Object.defineProperty(obj,'name',{
configurable: false, // 不可修改该属性值
value: 'zs',
})
// 报错
Object.defineProperty(obj,'name',{
configurable: true, // 不可修改该属性值
value: 'zs',
})