File tree 1 file changed +83
-0
lines changed
1 file changed +83
-0
lines changed Original file line number Diff line number Diff line change
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 >
You can’t perform that action at this time.
0 commit comments