Skip to content

Commit 8178571

Browse files
committedOct 13, 2021
vue3响应式原理(对比vue2)
1 parent 6dcac29 commit 8178571

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
<!DOCTYPE html>
2+
<html lang="en">
3+
<head>
4+
<meta charset="UTF-8">
5+
<title>v3响应式</title>
6+
</head>
7+
<body>
8+
<script type="text/javascript">
9+
let person = {
10+
name: '张三',
11+
age: 18
12+
};
13+
14+
//模拟vue2中的响应式
15+
// let p = {};
16+
// Object.defineProperty(p, 'name', {
17+
// get(){
18+
// //get name
19+
// return person.name;
20+
// },
21+
// set(value){
22+
// //set name
23+
// console.log('name changed, must change the page');
24+
// person.name = value;
25+
// }
26+
// })
27+
//
28+
// Object.defineProperty(p, 'age', {
29+
// configurable: true,
30+
// get(){
31+
// //get age
32+
// return person.age;
33+
// },
34+
// set(value){
35+
// //set age
36+
// console.log('age changed, must change the page');
37+
// person.age = value;
38+
// }
39+
// })
40+
41+
//vue3的响应式
42+
const p = new Proxy(person,{
43+
//读取
44+
get(target, propName){
45+
//person ==> target
46+
console.log('读取');
47+
return Reflect.get(target,propName);
48+
},
49+
set(target, propName, value) {
50+
// 修改和增加属性都调用
51+
console.log('修改');
52+
Reflect.set(target, propName, value);
53+
},
54+
//删除
55+
deleteProperty(target, propName) {
56+
console.log(`删除`);
57+
return Reflect.deleteProperty(target, propName);
58+
}
59+
});
60+
61+
// let obj = {
62+
// a:1,
63+
// b:2
64+
// }
65+
//
66+
// const x1 = Reflect.defineProperty(obj, 'c',{
67+
// get(){
68+
// return 3;
69+
// }
70+
// });
71+
// console.log(x1); //true 成
72+
// const x2 = Reflect.defineProperty(obj, 'c',{
73+
// get(){
74+
// return 4;
75+
// }
76+
// });
77+
// if(x2){
78+
// console.log(x2); //false 否
79+
// }
80+
// Reflect.get(obj,'a');
81+
</script>
82+
</body>
83+
</html>

0 commit comments

Comments
 (0)
Please sign in to comment.