3
3
function Transaction ( ) { }
4
4
5
5
Transaction . start = ( data ) => {
6
- console . log ( 'start transaction' ) ;
6
+ console . log ( '\nstart transaction' ) ;
7
7
let delta = { } ;
8
8
9
9
const methods = {
10
10
commit : ( ) => {
11
- console . log ( 'commit transaction' ) ;
11
+ console . log ( '\ncommit transaction' ) ;
12
12
Object . assign ( data , delta ) ;
13
13
delta = { } ;
14
14
} ,
15
15
rollback : ( ) => {
16
- console . log ( 'rollback transaction' ) ;
16
+ console . log ( '\nrollback transaction' ) ;
17
17
delta = { } ;
18
18
}
19
19
} ;
@@ -24,11 +24,14 @@ Transaction.start = (data) => {
24
24
if ( delta . hasOwnProperty ( key ) ) return delta [ key ] ;
25
25
return target [ key ] ;
26
26
} ,
27
+
28
+ // Added handler
27
29
getOwnPropertyDescriptor : ( target , key ) => (
28
30
Object . getOwnPropertyDescriptor (
29
31
delta . hasOwnProperty ( key ) ? delta : target , key
30
32
)
31
33
) ,
34
+
32
35
set ( target , key , val ) {
33
36
console . log ( 'set' , key , val ) ;
34
37
if ( target [ key ] === val ) delete delta [ key ] ;
@@ -40,25 +43,30 @@ Transaction.start = (data) => {
40
43
41
44
// Usage
42
45
43
- const data = { name : 'Marcus Aurelius' , city : 'Rome' , born : 121 } ;
46
+ const data = { name : 'Marcus Aurelius' , born : 121 } ;
44
47
45
48
const transaction = Transaction . start ( data ) ;
46
- console . log ( JSON . stringify ( data ) , JSON . stringify ( transaction ) ) ;
47
- console . dir ( { data , transaction } ) ;
49
+ console . log ( ' data' , JSON . stringify ( data ) ) ;
50
+ console . log ( 'transaction' , JSON . stringify ( transaction ) ) ;
48
51
49
52
transaction . name = 'Mao Zedong' ;
50
53
transaction . born = 1893 ;
51
- console . log ( 'JSON:' , JSON . stringify ( data ) , JSON . stringify ( transaction ) ) ;
52
- console . dir ( { data, transaction } ) ;
54
+ transaction . city = 'Shaoshan' ;
53
55
54
- transaction . commit ( ) ;
55
- console . log ( 'JSON: ' , JSON . stringify ( data ) , JSON . stringify ( transaction ) ) ;
56
- console . dir ( { data , transaction } ) ;
56
+ console . log ( '\noutput with JSON.stringify:' ) ;
57
+ console . log ( 'data ' , JSON . stringify ( data ) ) ;
58
+ console . log ( 'transaction *' , JSON . stringify ( transaction ) ) ;
57
59
58
- transaction . city = 'Shaoshan' ;
59
- console . log ( 'JSON:' , JSON . stringify ( data ) , JSON . stringify ( transaction ) ) ;
60
- console . dir ( { data, transaction } ) ;
60
+ console . log ( '\noutput with console.dir *:' ) ;
61
+ console . dir ( { transaction } ) ;
62
+
63
+ console . log ( '\noutput with for-in *:' ) ;
64
+ for ( const key in transaction ) {
65
+ console . log ( key , transaction [ key ] ) ;
66
+ }
61
67
62
- transaction . rollback ( ) ;
63
- console . log ( 'JSON:' , JSON . stringify ( data ) , JSON . stringify ( transaction ) ) ;
64
- console . dir ( { data, transaction } ) ;
68
+ console . log ( '\n* partially fixed, except .city\n' ) ;
69
+
70
+ transaction . commit ( ) ;
71
+ console . log ( 'data' , JSON . stringify ( data ) ) ;
72
+ console . log ( 'transaction' , JSON . stringify ( transaction ) ) ;
0 commit comments