File tree 4 files changed +255
-8
lines changed
4 files changed +255
-8
lines changed Original file line number Diff line number Diff line change
1
+ <!DOCTYPE HTML>
2
+ < html >
3
+ < head >
4
+ < meta http-equiv ="Content-Type " content ="text/html; charset=utf-8 ">
5
+ < script src ="http://img.mukewang.com/down/540812440001e40e00000000.js " type ="text/javascript "> </ script >
6
+ < script src ="http://img.mukewang.com/down/541f6ff70001a0a500000000.js " type ="text/javascript "> </ script >
7
+ < title > </ title >
8
+ </ head >
9
+ < body >
10
+
11
+ < script type ="text/javascript ">
12
+
13
+
14
+ function Callbacks ( options ) {
15
+ var list = [ ] ;
16
+ var self ;
17
+ var firingStart ;
18
+ var memory ;
19
+
20
+ function _fire ( data ) {
21
+ memory = options === 'memory' && data ;
22
+ firingIndex = firingStart || 0 ;
23
+ firingStart = 0 ;
24
+ firingLength = list . length ;
25
+ for ( ; list && firingIndex < firingLength ; firingIndex ++ ) {
26
+ list [ firingIndex ] ( data )
27
+ }
28
+ }
29
+
30
+ self = {
31
+ add : function ( fn ) {
32
+ var start = list . length ;
33
+ list . push ( fn )
34
+ if ( memory ) {
35
+ firingStart = start ; //获取最后一值
36
+ _fire ( memory ) ;
37
+ }
38
+ } ,
39
+ fire : function ( args ) {
40
+ if ( list ) {
41
+ _fire ( args )
42
+ }
43
+ }
44
+ }
45
+ return self ;
46
+ }
47
+
48
+
49
+ function fn1 ( val ) {
50
+ show ( 'fn1 says ' + val ) ;
51
+ }
52
+
53
+ function fn2 ( val ) {
54
+ show ( 'fn2 says ' + val ) ;
55
+ }
56
+
57
+ function fn3 ( val ) {
58
+ show ( 'fn3 says ' + val ) ;
59
+ }
60
+
61
+ var cbs = Callbacks ( 'memory' ) ;
62
+ cbs . add ( fn1 ) ;
63
+ cbs . fire ( 'foo' ) ;
64
+
65
+
66
+
67
+ cbs . add ( fn2 ) ;
68
+ cbs . fire ( 'bar' ) ;
69
+
70
+
71
+ cbs . add ( fn3 ) ;
72
+ cbs . fire ( 'aaron' )
73
+
74
+
75
+
76
+ </ script >
77
+
78
+ </ body >
79
+ </ html >
Original file line number Diff line number Diff line change 12
12
< script type ="text/javascript ">
13
13
14
14
15
- function Callbacks ( ) {
15
+ function Callbacks ( options ) {
16
16
var list = [ ] ;
17
17
var self ;
18
18
self = {
19
19
add : function ( fn ) {
20
20
list . push ( fn )
21
21
} ,
22
22
fire : function ( args ) {
23
- list . forEach ( function ( fn ) {
24
- fn ( args ) ;
25
- } )
23
+ if ( list ) {
24
+ list . forEach ( function ( fn ) {
25
+ fn ( args ) ;
26
+ } )
27
+ if ( options === 'once' ) {
28
+ list = undefined ;
29
+ }
30
+ }
26
31
}
27
32
}
28
33
return self ;
29
34
}
30
35
36
+
31
37
function fn1 ( val ) {
32
38
show ( 'fn1 says:' + val ) ;
33
39
}
34
40
function fn2 ( val ) {
35
41
show ( 'fn2 says ' + val ) ;
36
42
}
37
43
38
- var cbs = Callbacks ( ) ;
44
+
45
+ var cbs = Callbacks ( 'once' ) ;
39
46
cbs . add ( fn1 ) ;
40
47
cbs . fire ( 'foo' ) ;
41
- cbs . add ( fn2 ) ;
42
- cbs . fire ( 'bar' )
43
-
48
+ cbs . fire ( 'foo' ) ;
44
49
45
50
46
51
</ script >
Original file line number Diff line number Diff line change
1
+ <!DOCTYPE HTML>
2
+ < html >
3
+ < head >
4
+ < meta http-equiv ="Content-Type " content ="text/html; charset=utf-8 ">
5
+ < script src ="http://img.mukewang.com/down/540812440001e40e00000000.js " type ="text/javascript "> </ script >
6
+ < script src ="http://img.mukewang.com/down/541f6ff70001a0a500000000.js " type ="text/javascript "> </ script >
7
+ < title > </ title >
8
+ </ head >
9
+ < body >
10
+
11
+ < script type ="text/javascript ">
12
+
13
+ function Callbacks ( options ) {
14
+ var list = [ ] ;
15
+ var self ;
16
+ var firingStart ;
17
+ var memory ;
18
+
19
+ function _fire ( data ) {
20
+ memory = options === 'memory' && data ;
21
+ firingIndex =
22
+ firingStart || 0 ;
23
+ firingStart = 0 ;
24
+ firingLength = list . length ;
25
+ for ( ; list && firingIndex < firingLength ; firingIndex ++ ) {
26
+ if ( list [ firingIndex ] ( data ) === false && options === 'stopOnFalse' ) {
27
+ break ;
28
+ }
29
+ }
30
+ }
31
+
32
+ self = {
33
+ add : function ( fn ) {
34
+ var start = list . length ;
35
+ if ( options == 'unique' ) {
36
+ if ( - 1 === list . indexOf ( fn ) ) {
37
+ list . push ( fn )
38
+ }
39
+ } else {
40
+ list . push ( fn )
41
+ }
42
+ if ( memory ) {
43
+ firingStart = start ; //获取最后一值
44
+ _fire ( memory ) ;
45
+ }
46
+ } ,
47
+ fire : function ( args ) {
48
+ if ( list ) {
49
+ _fire ( args )
50
+ }
51
+ }
52
+ }
53
+ return self ;
54
+ }
55
+
56
+
57
+ function fn1 ( value ) {
58
+ show ( value ) ;
59
+ return false ;
60
+ }
61
+
62
+ function fn2 ( value ) {
63
+ fn1 ( "fn2 says: " + value ) ;
64
+ return false ;
65
+ }
66
+
67
+ var callbacks = Callbacks ( "stopOnFalse" ) ;
68
+ callbacks . add ( fn1 ) ;
69
+ callbacks . fire ( "foo" ) ;
70
+
71
+ callbacks . add ( fn2 ) ;
72
+
73
+
74
+
75
+
76
+ </ script >
77
+
78
+ </ body >
79
+ </ html >
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+
Original file line number Diff line number Diff line change
1
+ <!DOCTYPE HTML>
2
+ < html >
3
+ < head >
4
+ < meta http-equiv ="Content-Type " content ="text/html; charset=utf-8 ">
5
+ < script src ="http://img.mukewang.com/down/540812440001e40e00000000.js " type ="text/javascript "> </ script >
6
+ < script src ="http://img.mukewang.com/down/541f6ff70001a0a500000000.js " type ="text/javascript "> </ script >
7
+ < title > </ title >
8
+ </ head >
9
+ < body >
10
+
11
+ < script type ="text/javascript ">
12
+
13
+
14
+ function Callbacks ( options ) {
15
+ var list = [ ] ;
16
+ var self ;
17
+ var firingStart ;
18
+ var memory ;
19
+
20
+ function _fire ( data ) {
21
+ memory = options === 'memory' && data ;
22
+ firingIndex = firingStart || 0 ;
23
+ firingStart = 0 ;
24
+ firingLength = list . length ;
25
+ for ( ; list && firingIndex < firingLength ; firingIndex ++ ) {
26
+ list [ firingIndex ] ( data )
27
+ }
28
+ }
29
+
30
+ self = {
31
+ add : function ( fn ) {
32
+ var start = list . length ;
33
+ if ( options == 'unique' ) {
34
+ if ( - 1 === list . indexOf ( fn ) ) {
35
+ list . push ( fn )
36
+ }
37
+ } else {
38
+ list . push ( fn )
39
+ }
40
+ if ( memory ) {
41
+ firingStart = start ; //获取最后一值
42
+ _fire ( memory ) ;
43
+ }
44
+ } ,
45
+ fire : function ( args ) {
46
+ if ( list ) {
47
+ _fire ( args )
48
+ }
49
+ }
50
+ }
51
+ return self ;
52
+ }
53
+
54
+
55
+ function fn1 ( val ) {
56
+ show ( 'fn1 says ' + val ) ;
57
+ }
58
+ var callbacks = Callbacks ( "unique" ) ;
59
+ callbacks . add ( fn1 ) ;
60
+ callbacks . add ( fn1 ) ; // 重复添加
61
+ callbacks . add ( fn1 ) ;
62
+ callbacks . fire ( "foo" ) ;
63
+
64
+
65
+
66
+ </ script >
67
+
68
+ </ body >
69
+ </ html >
You can’t perform that action at this time.
0 commit comments