3
3
* 观察者模式 订阅模式
4
4
*
5
5
* */
6
- // function PubSub() {
7
- // this.handlers = {};
8
- // }
9
- // PubSub.prototype = {
10
- // // 订阅事件
11
- // on: function(eventType, handler){
12
- // var self = this;
13
- // if (!(eventType in self.handlers)) {
14
- // self.handlers[eventType] = [];
15
- // }
16
- // self.handlers[eventType].push(handler);
17
- // console.log(self.handlers.A) ;
18
- // debugger;
19
- // return this;
20
- // },
21
- // // 触发事件(发布事件)
22
- // emit: function(eventType){
23
- // var self = this;
24
- // var handlerArgs = Array.prototype.slice.call(arguments,1 );
25
- // for(var i = 0; i < self.handlers[eventType].length; i++) {
26
- // self.handlers[eventType][i].apply(self,handlerArgs) ;
27
- // }
28
- // return self;
29
- // },
30
- // // 删除订阅事件
31
- // off: function(eventType, handler){
32
- // var currentEvent = this.handlers[eventType];
33
- // var len = 0 ;
34
- // if (currentEvent ) {
35
- // len = currentEvent.length;
36
- // for (var i = len - 1; i >= 0; i--){
37
- // if (currentEvent[i] === handler){
38
- // currentEvent.splice(i, 1);
39
- // }
40
- // }
41
- // }
42
- // return this ;
43
- // }
44
- // };
45
- //
46
- // var pubsub = new PubSub();
47
- // var callback = function( data){
48
- // console.log('第一次没有被删除事件',data) ;
49
- // };
50
- //
51
- // //订阅事件A 注册
52
- // pubsub.on('A', function( data){
53
- // console.log(1 + data );
54
- // });
55
- // pubsub.on('A', function( data){
56
- // console.log(2 + data );
57
- // } );
58
- // pubsub.on('A', callback);
59
- //
60
- // //触发事件A
61
- // pubsub.emit('A', '我是参数','123');
62
- // // 1我是参数
63
- // // 2我是参数
64
- // // 第一次没有被删除事件 我是参数
65
- //
66
- // //删除事件A的订阅源callback
67
- // pubsub.off('A', callback);
68
- //
69
- // pubsub.emit('A', '我是第二次调用的参数');
70
- // //1我是第二次调用的参数
71
- // //2我是第二次调用的参数
6
+ function PubSub ( ) {
7
+ this . handlers = { } ;
8
+ }
9
+ PubSub . prototype = {
10
+ // 订阅事件
11
+ on : function ( eventType , handler ) {
12
+ var self = this ;
13
+ if ( ! ( eventType in self . handlers ) ) {
14
+ self . handlers [ eventType ] = [ ] ;
15
+ }
16
+ self . handlers [ eventType ] . push ( handler ) ;
17
+ return this ;
18
+ } ,
19
+ // 触发事件(发布事件)
20
+ emit : function ( eventType ) {
21
+ var self = this ;
22
+ var handlerArgs = Array . prototype . slice . call ( arguments , 1 ) ;
23
+ for ( var i = 0 ; i < self . handlers [ eventType ] . length ; i ++ ) {
24
+ self . handlers [ eventType ] [ i ] . apply ( self , handlerArgs ) ;
25
+ }
26
+ return self ;
27
+ } ,
28
+ // 删除订阅事件
29
+ off : function ( eventType , handler ) {
30
+ var currentEvent = this . handlers [ eventType ] ;
31
+ var len = 0 ;
32
+ if ( currentEvent ) {
33
+ len = currentEvent . length ;
34
+ for ( var i = len - 1 ; i >= 0 ; i -- ) {
35
+ if ( currentEvent [ i ] === handler ) {
36
+ currentEvent . splice ( i , 1 ) ;
37
+ }
38
+ }
39
+ }
40
+ return this ;
41
+ }
42
+ } ;
43
+
44
+ function test ( ) {
45
+ var pubsub = new PubSub ( ) ;
46
+ var callback = function ( data ) {
47
+ console . log ( '第一次没有被删除事件' , data ) ;
48
+ } ;
49
+
50
+ //订阅事件A 注册
51
+ pubsub . on ( 'A' , function ( data ) {
52
+ console . log ( 1 + data ) ;
53
+ } ) ;
54
+ pubsub . on ( 'A' , function ( data ) {
55
+ console . log ( 2 + data ) ;
56
+ } ) ;
57
+ pubsub . on ( 'A' , callback ) ;
58
+
59
+ //触发事件A
60
+ pubsub . emit ( 'A' , '我是参数' , '123' ) ;
61
+ // 1我是参数
62
+ // 2我是参数
63
+ // 第一次没有被删除事件 我是参数
64
+
65
+ //删除事件A的订阅源callback
66
+ pubsub . off ( 'A' , callback ) ;
67
+
68
+ pubsub . emit ( 'A' , '我是第二次调用的参数' ) ;
69
+ //1我是第二次调用的参数
70
+ //2我是第二次调用的参数
71
+ }
0 commit comments