File tree Expand file tree Collapse file tree 4 files changed +72
-17
lines changed Expand file tree Collapse file tree 4 files changed +72
-17
lines changed Original file line number Diff line number Diff line change 11#!/usr/bin/env node
22
3- const EventEmitter = require ( 'events' ) . EventEmitter ,
3+ const { EventEmitter } = require ( 'events' ) ,
44 log = console . log ,
55 e = new EventEmitter ( ) ;
66
Original file line number Diff line number Diff line change 1- const EventEmitter = require ( 'events' ) . EventEmitter ;
1+ const { EventEmitter } = require ( 'events' ) ;
22
33class Dog extends EventEmitter {
44 constructor ( name , energy ) {
Original file line number Diff line number Diff line change @@ -24,34 +24,39 @@ class Queue extends EventEmitter {
2424 #data = [ ] ;
2525}
2626
27- let queue = new Queue ( ) ;
28-
2927class Producer {
30- constructor ( ) { }
28+ constructor ( queue ) {
29+ this . #queue = queue ;
30+ }
31+
3132 create ( data ) {
3233 log ( '+ prd create:' , data ) ;
33- queue . write ( data ) ;
34+ this . # queue. write ( data ) ;
3435 }
36+
37+ #queue = null ;
3538}
3639
3740class Consumer {
38- constructor ( ) { }
41+ constructor ( queue ) {
42+ this . #queue = queue ;
43+ }
44+
3945 destroy ( ) {
40- log ( '- csm destroy:' , queue . read ( ) ) ;
46+ log ( '- csm destroy:' , this . # queue. read ( ) ) ;
4147 }
48+
49+ #queue = null ;
4250}
4351
44- let csm = new Consumer ( ) ;
52+ function main ( ) {
53+ const queue = new Queue ( ) ,
54+ prd = new Producer ( queue ) ,
55+ csm = new Consumer ( queue ) ;
4556
46- queue . on ( 'data' , async ( ) => {
47- csm . destroy ( ) ;
48- } ) ;
57+ queue . on ( 'data' , ( ) => csm . destroy ( ) ) ;
4958
50- function main ( ) {
51- const prd = new Producer ( ) ;
52- for ( let i = 0 ; i < 5 ; i ++ ) {
53- prd . create ( i ) ;
54- }
59+ for ( let i = 0 ; i < 5 ; i ++ ) prd . create ( i ) ;
5560}
5661
5762main ( ) ;
Original file line number Diff line number Diff line change 1+ #!/usr/bin/env node
2+
3+ // b = a + 10, 当 a 的值变化时,b 的值自动更新
4+ // b 绑定到 a 上了,下面是实现的代码
5+
6+ const { EventEmitter } = require ( 'events' ) ;
7+
8+ class A extends EventEmitter {
9+ constructor ( value ) {
10+ super ( ) ;
11+ this . #value = value ;
12+ this . emit ( 'change' ) ;
13+ }
14+
15+ get value ( ) { return this . #value; }
16+ set value ( value ) {
17+ this . #value = value ;
18+ this . emit ( 'change' ) ;
19+ }
20+
21+ #value = 0
22+ }
23+
24+ class B {
25+ constructor ( obj ) {
26+ this . #value = obj . value + 10 ;
27+ obj . on ( 'change' , ( ) => this . #value = obj . value + 10 ) ;
28+ }
29+
30+ get value ( ) { return this . #value; }
31+ set value ( value ) {
32+ this . #value = value ;
33+ this . emit ( 'change' , value ) ;
34+ }
35+
36+ #value = 0
37+ }
38+
39+ class App {
40+ static main ( ) {
41+ const log = console . log ;
42+ const a = new A ( 10 ) ;
43+ const b = new B ( a ) ;
44+ log ( b . value ) ; // 20
45+ a . value = 20 ;
46+ log ( b . value ) ; // 30
47+ }
48+ }
49+
50+ App . main ( ) ;
You can’t perform that action at this time.
0 commit comments