object.defineproperty():给一个对象定义一个新属性或修改一个对象的现有属性,并返回此对象。
object.defineproperty(object,’propName’,descriptor);
object:要定义的对象
propName:要定义/修改的属性名
descriptor:要定义/修改的属性描述
enumerable:控制属性是否可枚举,默认false
writeable:控制属性是否可修改,默认false
configurable:控制属性是否可被删除,默认false
get(){}:当有人读取属性时,get函数(getter)就会被调用,且返回值就是要定义/读取的值
set(value){}:当有人定义/修改属性时,set函数(setter)就会被调用,且会收到修改的具体值
一个简单的数据代理
let obj = { x: 100 }
let obj2 = { y: 200 }
Object.defineProperty(obj2, 'x', {
get() {
return obj.x
},
set(value) {
obj.x = value
}
})
obj2.x = 300
console.log(obj.x, obj2.x)//300 300
