修改对象
const obj = {
a:1
}
obj.a = 2
console.log(obj.a) // 2
// 打印2 ,如果是还想打印出来obj.a 为1 ,就是组织对象被修改
先介绍下:Object.defineProperty(对象, 属性, 描述符)
数据描述符:
- value : 属性值
- writable:
true 是否可写
。默认 false - configurable:
true 是否可配置
。默认false - enumerable:
true 是否可枚举
。默认false
存取描述符
- set:function () { } 属性访问器 进行写操作时调用该方法
- get:function () { } 属性访问器 进行读操作时调用该方法
// 正常对象 可写
var obj2 ={
name:'luan'
}
obj2.name = 'lyans' // 对象可写
console.log(obj2.name)
delete obj2.name // true 对象可配置 configurable
for (var pp in obj2){
console.log(pp) // 对象可枚举
}
不可写不可配置不可枚举
Function.prototype = {
name:'lei'
}
console.log(Function.prototype.name) //undefined
// 对象不可写
var a =10;
delete window.a // false
//configurable => false 该对象不可配置
Object.defineProperty 对数据描述符的设置:
var obj = {}
Object.defineProperty(obj,'name',{
value:'lyan',
writable:false, // 不可写
configurable:true,
enumerable:true
})
Object.defineProperty 对存取描述符的设置:
var obj = {}
var tempValue = ''
Object.defineProperty(obj,'name',{
//value:'lyan',
//writable:false, // 不可写
configurable:true,
enumerable:true,
get:function(){
return tempValue
}
set: function(newValue){
tempValue = newValue
}
})
(如果在定义时就已经给对象设置了属性,那么此时默认为可写可配置可枚举,在 defineProperty 中如果没有对这三个属性进行修改则默认都为 true
网友评论