-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathevent.js
46 lines (41 loc) · 929 Bytes
/
event.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
'use strict'
var Event = function() {
this.listeners = {};
}
Event.prototype.on = function(event, fn) {
event = '$' + event;
(listeners[event] || (listeners[event] = [])).push(fn)
}
Event.prototype.emit = function(event) {
event = '$' + event
let cbs = listeners[event]
if (cbs) {
const args = [].slice.call(arguments, 1)
cbs = cbs.slice()
for (let i = 0, l = cbs.length; i < l; i++) {
cbs[i].apply(this, args)
}
}
}
Event.prototype.off = function(event, fn) {
event = '$' + event
if (!arguments.length) {
listeners = {}
} else {
const cbs = listeners[event]
if (cbs) {
if (!fn) {
listeners[event] = null
} else {
for (let i = 0, l = cbs.length; i < l; i++) {
const cb = cbs[i]
if (cb === fn || cb.fn === fn) {
cbs.splice(i, 1)
break
}
}
}
}
}
}
export default Event