监听:
Object.....是监听的原始对象
<html>
<head> </head>
<body>
<div id="app">
<p></p>
</div>
</body>
<script>
let data = {
name: "这是个测试",
age: 18,
height: 180,
};
Object.keys(data).forEach((key) => {
// key 属性名
// data[key] 属性值
// data 原对象
defineReactive(data, key, data[key]);
});
// 响应式转化方法
function defineReactive(data, key, value) {
Object.defineProperty(data, key, {
get() {
console.log("这是当前value", value);
return value;
},
set(newVal) {
value = newVal;
document.querySelector("#app p").innerHTML = data.name;
},
});
}
document.querySelector("#app p").innerHTML = data.name;
</script>
</html>
Proxy监听代理对象
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Document</title>
</head>
<body></body>
<script>
const target = {
name: "Tom",
};
const handler = {
get: function (target, prop, receiver) {
console.log("get", prop);
return target[prop];
},
set: function (target, prop, value, receiver) {
console.log("set", prop, value);
target[prop] = value;
return true;
},
};
const proxy = new Proxy(target, handler);
</script>
</html>