class EventEmitter {
constructor() {
this.events = {} // 事件存储
}
// 注册事件
emit(eventName) {
// 获取传入的参数信息
let args = arguments[1]
let callbackArr = this.events[eventName];
console.log('callbackArr', callbackArr)
if (callbackArr && callbackArr.length) {
for (let i = 0; i < callbackArr.length; i++) {
//循环执行列表中注册加入进来的事件 并传入参数
callbackArr[i](args || null)
}
}
}
// 监听
on(eventName, cb) {
// eventName为事件名称, 如果没有指定的属性就创建一个空数组
if (!this.events[eventName]) {
this.events[eventName] = []
}
if (typeof cb !== 'function') {
throw (new Error(`${cb} not function`))
}
this.events[eventName].push(cb)
console.log('eventName', eventName)
}
// 移除
remove(eventName, cb) {
let callbackArr = this.events[eventName]
if (callbackArr && callbackArr.length) {
for (let i = 0; i < callbackArr.length; i++) {
let index = callbackArr.indexOf(cb);
callbackArr.splice(index, 1)
}
}
}
}
let eventEmitter = new EventEmitter()
eventEmitter.on('click', (data) => {
console.log('qw ------', data)
})
eventEmitter.emit('click', 12)
eventEmitter.emit('click', 13)
var clickCallback = function (data) {
console.log("click callback", data);
};
eventEmitter.on("click", clickCallback);
eventEmitter.on("say", (data) => {
console.log('测试' + data.name)
});
eventEmitter.on("click", function () {
console.log("other click callback");
});
eventEmitter.remove("click", clickCallback);
eventEmitter.emit("say",{name:'123'});
js发送事件和监听
于 2022-07-01 17:18:00 首次发布