# 1.数据代理
# Object.defineProperty
Object.defineProperty
是 JavaScript 中用于定义对象属性的方法。通过使用这个方法,你可以更细致地控制属性的行为。该方法接受三个参数:
- 对象名(Object): 要定义属性的对象名。
- 属性名 (String): 要定义或修改的属性的名称。
- 属性描述符 (Object): 包含属性的特性的对象。
// 正常配置对象:
let cat = {
name:'muggle',
age:17,
}
// 用Object.defineProperty给对象添加属性
Object.defineProperty(cat, 'sex', {
value:'male', // 属性的值,
enumerable:true, // 控制属性是否可以被枚举,默认为false
writable:true, // 控制属性是否可以被修改,默认为false
configurable:true // 控制属性是否可以被删除,默认为false
})
# getter和setter
Object.defineProperty第三个参数中,还有两个函数——get和set,get用于获取属性值,set用于修改属性值
let num = 17;
let cat = {
name:"muggle",
sex:"male"
}
Object.defineProperty(cat, 'age', {
get(){
return num; // 将cat的age属性与变量num绑定
},
set(val){ // set接收一个参数,改参数是新的属性值
num = val;
}
})
// 好处:将变量num和cat.age实现双向绑定
// 如何修改:
cat.age = 20; --> 该语句执行时,20会当作实参传递给set函数的val形参。
# 数据代理
通过一个对象代理对另一个对象中属性的操作(读/写)
let muggle = {
fav:'bread'
}
let daye = {
hob:'sleep'
}
Object.defineProperty(muggle, 'hob', {
get(){
return daye.hob;
}
set(val){
daye.hob = val
}
})
muggle.hob = 'eat';
daye.hob --> eat 麻瓜代理打野,通过麻瓜把打野的hob修改为eat