码迷,mamicode.com
首页 > Web开发 > 详细

Nodejs事件无法remove的问题

时间:2016-09-12 15:44:54      阅读:115      评论:0      收藏:0      [点我收藏+]

标签:

最近在事件处理时遇到一个问题,添加事件监听没有问题,一切正常。但是在remove的时候,却怎么也删除不了。调试代码后发现是匿名函数的原因。例如有如下代码:

 1 import { EventEmitter, } from ‘events‘;
 2 
 3 class EventBase extends EventEmitter {
 4   constructor() {
 5     super();
 6   }
 7 }
 8 
 9 let EventInstance = new EventBase();
10 
11 class Operator {
12   constructor() {}
13 
14   onTouchStart(e) {...}
15 
16   bindEvent() {
17     // 注意bind(this)之后就不是OnTouchStart了,而是一个匿名的函数
18     EventInstance.on(this.onTouchStart.bind(this));
19   }
20 
21   unBindEvent() {
22     // 这时无法成功
23     EventInstance.removeListener(this.onTouchStart);
24 
25     /**
26      * 即使这样也无法成功
27      * EventInstance.removeListener(this.onTouchStart.bind(this));
28      */
29   }
30 }

正确的做法如下:

 1 import { EventEmitter, } from ‘events‘;
 2 
 3 class EventBase extends EventEmitter {
 4   constructor() {
 5     super();
 6   }
 7 }
 8 
 9 let EventInstance = new EventBase();
10 
11 class Operator {
12   constructor() {
13     // 提前绑定
14     this.onTouchStart = this.onTouchStart.bind(this);
15   }
16 
17   onTouchStart(e) {...}
18 
19   bindEvent() {
20     // 这样就可以了
21     EventInstance.on(this.onTouchStart);
22   }
23 
24   unBindEvent() {
25     // 顺利解除
26     EventInstance.removeListener(this.onTouchStart);
27   }
28 }

 

Nodejs事件无法remove的问题

标签:

原文地址:http://www.cnblogs.com/Farmer-D/p/5864910.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!