我正在尝试删除这样的eventlistener:
var callback = function () {
someFun(someobj)
}
console.log(callback)
e.once("5", callback);
uponSomeOtherStuffHappening('',
function() {
console.log(e.listeners("5")[0])
e.removeListener(inTurns, callback)
})
但它不起作用。
第一个控制台日志显示:
[Function]
第二个显示:
[Function: g]
为什么他们不同?
答案 0 :(得分:1)
once()的实现在一次调用后插入一个函数g()来删除你的监听器。
来自events.js:
EventEmitter.prototype.once = function(type, listener) {
if ('function' !== typeof listener) {
throw new Error('.once only takes instances of Function');
}
var self = this;
function g() {
self.removeListener(type, g);
listener.apply(this, arguments);
};
g.listener = listener;
self.on(type, g);
return this;
};
所以,如果你这样做了:
console.log(e.listeners("5")[0].listener);
他们是一样的。