@@ -11,59 +11,49 @@ Transaction.start = (data) => {
11
11
console . log ( 'commit transaction' ) ;
12
12
Object . assign ( data , delta ) ;
13
13
delta = { } ;
14
- methods . delta = delta ;
15
14
} ,
16
15
rollback : ( ) => {
17
16
console . log ( 'rollback transaction' ) ;
18
17
delta = { } ;
19
- methods . delta = delta ;
20
- } ,
21
- delta
18
+ }
22
19
} ;
23
20
24
21
return new Proxy ( data , {
25
22
get ( target , key ) {
26
- console . log ( 'get' , key ) ;
27
- if ( key === Symbol . iterator ) {
28
- const changes = Object . keys ( delta ) ;
29
- const keys = Object . keys ( target ) . concat ( changes ) ;
30
- const props = keys . filter ( ( x , i , a ) => a . indexOf ( x ) === i ) ;
31
- return props [ Symbol . iterator ] ( ) ;
32
- }
33
- return methods [ key ] || delta [ key ] || target [ key ] ;
23
+ if ( methods . hasOwnProperty ( key ) ) return methods [ key ] ;
24
+ if ( delta . hasOwnProperty ( key ) ) return delta [ key ] ;
25
+ return target [ key ] ;
34
26
} ,
35
27
set ( target , key , val ) {
36
28
console . log ( 'set' , key , val ) ;
37
- if ( target [ key ] === val ) {
38
- delete delta [ key ] ;
39
- } else {
40
- delta [ key ] = val ;
41
- }
29
+ if ( target [ key ] === val ) delete delta [ key ] ;
30
+ else delta [ key ] = val ;
42
31
return true ;
43
32
}
44
33
} ) ;
45
34
} ;
46
35
47
-
48
36
// Usage
49
37
50
38
const data = { name : 'Marcus Aurelius' , city : 'Rome' , born : 121 } ;
51
39
52
40
const transaction = Transaction . start ( data ) ;
41
+ console . log ( JSON . stringify ( data ) , JSON . stringify ( transaction ) ) ;
42
+ console . dir ( { data, transaction } ) ;
53
43
54
44
transaction . name = 'Mao Zedong' ;
55
45
transaction . born = 1893 ;
56
-
57
- console . dir ( transaction . delta ) ;
46
+ console . log ( 'JSON:' , JSON . stringify ( data ) , JSON . stringify ( transaction ) ) ;
47
+ console . dir ( { data , transaction } ) ;
58
48
59
49
transaction . commit ( ) ;
60
-
61
- console . dir ( transaction . delta ) ;
50
+ console . log ( 'JSON:' , JSON . stringify ( data ) , JSON . stringify ( transaction ) ) ;
51
+ console . dir ( { data , transaction } ) ;
62
52
63
53
transaction . city = 'Shaoshan' ;
64
-
65
- console . dir ( transaction . delta ) ;
54
+ console . log ( 'JSON:' , JSON . stringify ( data ) , JSON . stringify ( transaction ) ) ;
55
+ console . dir ( { data , transaction } ) ;
66
56
67
57
transaction . rollback ( ) ;
68
-
69
- console . dir ( transaction . delta ) ;
58
+ console . log ( 'JSON:' , JSON . stringify ( data ) , JSON . stringify ( transaction ) ) ;
59
+ console . dir ( { data , transaction } ) ;
0 commit comments