File tree 5 files changed +132
-23
lines changed
5 files changed +132
-23
lines changed Original file line number Diff line number Diff line change
1
+ let user = {
2
+ nickname : 'youngoldman' ,
3
+ age : 18 ,
4
+ hobby : [ 'football' , 'basketball' ] ,
5
+ say ( ) {
6
+ console . log ( 'hello' )
7
+ }
8
+ }
9
+
10
+ let tempName = user . nickname
11
+ Object . defineProperty ( user , 'nickname' , {
12
+ get ( ) {
13
+ // console.log('get', objname)
14
+ // debugger
15
+ return tempName
16
+ } ,
17
+ set ( v ) {
18
+ tempName = v
19
+ console . log ( 'set' , tempName )
20
+ return tempName
21
+ } ,
22
+ } )
Original file line number Diff line number Diff line change @@ -21,10 +21,27 @@ <h1>debounce</h1>
21
21
</ body >
22
22
< script src ="./debounce.js "> </ script >
23
23
< script src ="./throttle.js "> </ script >
24
- < script src ="./promise.js "> </ script >
24
+ <!-- < script src="./promise.js"></script>
25
25
<script src="./publish-subscribe.js"></script>
26
- < script src ="./observer.js "> </ script >
26
+ <script src="./observer.js"></script> -->
27
+ < script src ="./vm.js "> </ script >
27
28
< script >
29
+ let vm = new Vue ( {
30
+ data : {
31
+ message : 'hello' ,
32
+ flag : true ,
33
+ list : [ 1 , 2 , 3 ] ,
34
+ obj : {
35
+ a : 1 ,
36
+ b : 2 ,
37
+ man : {
38
+ c : 3 ,
39
+ d : 4
40
+ }
41
+ }
42
+ }
43
+ } )
44
+
28
45
const debounceInput = document . querySelector ( '#debounce' )
29
46
debounceInput . addEventListener ( 'input' , debounce ( ( ...args ) => {
30
47
console . log ( 'debounce' ) ;
Original file line number Diff line number Diff line change 35
35
a = 2
36
36
console . log ( a )
37
37
} catch ( error ) {
38
- console . log ( error . name )
39
- console . log ( error . message )
38
+ // console.log(error.name)
39
+ // console.log(error.message)
40
40
}
41
- throw new Error ( '错误信息' )
41
+ // throw new Error('错误信息')
Original file line number Diff line number Diff line change 1
- // const throttle = (fn, delay = 1000) => {
2
- // let record = Date.now()
3
- // return function (...args) {
4
- // let now = Date.now()
5
- // if (now - record > delay) {
6
- // fn(...args)
7
- // record = Date.now()
8
- // }
9
- // }
10
- // }
11
-
1
+ // 判断时间法
12
2
const throttle = ( fn , delay = 1000 ) => {
13
- let executed = false
3
+ let record = Date . now ( )
14
4
return function ( ...args ) {
15
- if ( ! executed ) {
16
- setTimeout ( ( ) => {
17
- fn ( ...args )
18
- executed = false
19
- } , delay )
20
- executed = true
5
+ let now = Date . now ( )
6
+ if ( now - record > delay ) {
7
+ fn ( ...args )
8
+ record = Date . now ( )
21
9
}
22
10
}
23
11
}
12
+
13
+ // 定时器法
14
+ // const throttle = (fn, delay = 1000) => {
15
+ // let executed = false
16
+ // return function (...args) {
17
+ // if (!executed) {
18
+ // setTimeout(() => {
19
+ // fn(...args)
20
+ // executed = false
21
+ // }, delay)
22
+ // executed = true
23
+ // }
24
+ // }
25
+ // }
Original file line number Diff line number Diff line change
1
+ class Vue {
2
+ constructor ( options ) {
3
+ this . $options = options
4
+ this . $data = options . data
5
+ this . $el = document . querySelector ( options . el )
6
+ this . initData ( )
7
+ }
8
+
9
+ // 初始化数据
10
+ initData ( ) {
11
+ let data = this . $data
12
+ Object . keys ( data ) . forEach ( key => {
13
+ defineReactive ( this , key , data [ key ] )
14
+ // Object.defineProperty(this, key, {
15
+ // enumerable: true,
16
+ // configurable: true,
17
+ // get() {
18
+ // return data[key]
19
+ // },
20
+ // set(value) {
21
+ // data[key] = value
22
+ // },
23
+ // })
24
+ } )
25
+ // observe(data)
26
+ }
27
+ }
28
+
29
+ // 劫持数据对象
30
+ const defineReactive = ( obj , key , value ) => {
31
+ observe ( value )
32
+ Object . defineProperty ( obj , key , {
33
+ enumerable : true ,
34
+ configurable : true ,
35
+ get ( ) {
36
+ console . log ( `${ key } 属性被访问了` )
37
+ return value
38
+ } ,
39
+ set ( val ) {
40
+ if ( val === value ) return
41
+ console . log ( `值发生了改变:${ val } =>${ value } ` )
42
+ value = val
43
+ return value
44
+ } ,
45
+ } )
46
+ }
47
+
48
+ // // 判断数据是不是基本类型, 如果是基本类型则不进行递归, 否则进行递归
49
+ const observe = data => {
50
+ let type = Object . prototype . toString . call ( data )
51
+ if ( type !== '[object Object]' && type !== '[object Array]' ) {
52
+ return
53
+ }
54
+ new Observer ( data )
55
+ }
56
+
57
+ // 监听数据
58
+ class Observer {
59
+ constructor ( data ) {
60
+ this . walk ( data )
61
+ }
62
+ walk ( data ) {
63
+ Object . keys ( data ) . forEach ( key => {
64
+ let value = data [ key ]
65
+ defineReactive ( data , key , value )
66
+ } )
67
+ }
68
+ }
You can’t perform that action at this time.
0 commit comments