<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <script> // 创建一个user1对象 let user1 = { name : "Jack" }; // 创建一个user2对象 let user2 = {}; // 给user2扩展一个name属性 Object.defineProperty(user2,"name",{ // 数据代理 get(){ console.log("get方法执行了") return user1.name; }, // 数据劫持 set(value){ // 改数据 user1.name = value; console.log("页面更新了"); } }); // 成也萧何败也萧何 // 这个会导致我们的属性新增或删除没有响应式处理 </script> </body> </html>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<script>
// 创建一个user1对象
let user1 = {
name : "Jack"
};
// 创建一个user2对象
let user2 = {};
// 给user2扩展一个name属性
Object.defineProperty(user2,"name",{
// 数据代理
get(){
console.log("get方法执行了")
return user1.name;
},
// 数据劫持
set(value){
// 改数据
user1.name = value;
console.log("页面更新了");
}
});
// 成也萧何败也萧何
// 这个会导致我们的属性新增或删除没有响应式处理
</script>
</body>
</html>
user1 {name: 'Jack'} user2 {}name: "Jack"get name: ƒ get()set name: ƒ set(value)[[Prototype]]: Object 01.html:20 get方法执行了 user2.name 01.html:20 get方法执行了 'Jack' user2.name 01.html:20 get方法执行了 'Jack' user2.name="Rose" 01.html:27 页面更新了 'Rose' user2 {}name: "Rose"get name: ƒ get()set name: ƒ set(value)[[Prototype]]: Object 01.html:20 get方法执行了 user2.age=30 30 user1.age undefined delete user2.age true user2 {}name: (...)get name: ƒ get()set name: ƒ set(value)[[Prototype]]: Object
user1
{name: 'Jack'}
user2
{}name: "Jack"get name: ƒ get()set name: ƒ set(value)[[Prototype]]: Object
01.html:20 get方法执行了
user2.name
01.html:20 get方法执行了
'Jack'
user2.name
01.html:20 get方法执行了
'Jack'
user2.name="Rose"
01.html:27 页面更新了
'Rose'
user2
{}name: "Rose"get name: ƒ get()set name: ƒ set(value)[[Prototype]]: Object
01.html:20 get方法执行了
user2.age=30
30
user1.age
undefined
delete user2.age
true
user2
{}name: (...)get name: ƒ get()set name: ƒ set(value)[[Prototype]]: Object