添加监听器
在一个对象中创建了以事件名为属性名的数组,数组里面存放的是函数
addListener(eventType, listener) {
if (!this._listeners[eventType]) {
this._listeners[eventType] = [];
}
this._listeners[eventType].push(listener);
}
移除监听事件
以倒序方式遍历事件数组,查出要移除的函数,并置为null
removeListener(eventType, listener) {
if (!this._listeners[eventType]) {
return;
}
for (let i = this._listeners[eventType].length - 1; i >= 0; i--) {
if (this._listeners[eventType][i] === listener) {
this._listeners[eventType][i] = null;
break;
}
}
}
触发事件
判断事件属性存在,获取参数,正序遍历事件数组并执行函数,
trigger(eventType) {
if (!this._listeners[eventType]) {
return true;
}
// 获取触发事件所传的参数
const args = Array.prototype.slice.call(arguments, 1);
let result = true;
for (let i = 0; i < this._listeners[eventType].length; i++) {
const fn = this._listeners[eventType][i];
if (fn) {
if (false === fn.apply(this, args)) {
result = false;
}
}
}
return result;
}