|
|
@ -138,10 +138,13 @@ EventEmitter.prototype.on = EventEmitter.prototype.addListener; |
|
|
|
|
|
|
|
EventEmitter.prototype.once = function(type, listener) { |
|
|
|
var self = this; |
|
|
|
self.on(type, function g() { |
|
|
|
function g() { |
|
|
|
self.removeListener(type, g); |
|
|
|
listener.apply(this, arguments); |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
g.listener = listener; |
|
|
|
self.on(type, g); |
|
|
|
|
|
|
|
return this; |
|
|
|
}; |
|
|
@ -157,12 +160,23 @@ EventEmitter.prototype.removeListener = function(type, listener) { |
|
|
|
var list = this._events[type]; |
|
|
|
|
|
|
|
if (isArray(list)) { |
|
|
|
var i = list.indexOf(listener); |
|
|
|
if (i < 0) return this; |
|
|
|
list.splice(i, 1); |
|
|
|
var position = -1; |
|
|
|
for (var i = 0, length = list.length; i < length; i++) { |
|
|
|
if (list[i] === listener || |
|
|
|
(list[i].listener && list[i].listener === listener)) |
|
|
|
{ |
|
|
|
position = i; |
|
|
|
break; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (position < 0) return this; |
|
|
|
list.splice(position, 1); |
|
|
|
if (list.length == 0) |
|
|
|
delete this._events[type]; |
|
|
|
} else if (this._events[type] === listener) { |
|
|
|
} else if (list === listener || |
|
|
|
(list.listener && list.listener === listener)) |
|
|
|
{ |
|
|
|
delete this._events[type]; |
|
|
|
} |
|
|
|
|
|
|
|