我创建了一个事件发射器类。它工作正常。我告诉你如何:
这是班级:
class EventEmitter{
constructor() {
this.events = {};
}
on(eventName,callback) {
if(this.events[eventName]) {
this.events[eventName].push(callback);
} else {
this.events[eventName] = [callback];
}
}
trigger(eventName, ...rest) {
if(this.events[eventName]) {
this.events[eventName].forEach(cb => {
cb.apply(null,rest);
});
}
}
}
通过这门课,我可以听一些事件。像这样:
const ee = new EventEmitter();
ee.on('change', (aa) => {
console.log(aa);
});
然后我可以用触发方法触发它
ee.trigger('change','Argument');
现在我想听听某些条件下的事件。
例如 :
ee.on({'change': 'barack the boss'}, (aa) => {
console.log(aa);
});
上面的代码只应在触发器如下所示时执行:
//wont run
ee.trigger('change','barack is no boss');
//will run
ee.trigger('change','barack the boss');
我想知道该怎么做。我不是要你写我的代码,我想要一个正确方向的例子或一步。
先感谢您。
整码:
class EventEmitter{
constructor() {
this.events = {};
}
on(eventName,callback) {
if(this.events[eventName]) {
this.events[eventName].push(callback);
} else {
this.events[eventName] = [callback];
}
}
trigger(eventName, ...rest) {
if(this.events[eventName]) {
this.events[eventName].forEach(cb => {
cb.apply(null,rest);
});
}
}
}
//events has been created and is currently an empty object
const ee = new EventEmitter();
//even has been created, this event has a function which will be executed when event is triggered
ee.on({'change': 'barack the boss'}, (aa) => {
console.log(aa);
});
//wont run
ee.trigger('change','barack is no boss');
//will run
ee.trigger('change','barack the boss');
我要做的是在Object.Keys事件登记册上使用.on()
。这将允许您通过传递的对象进行迭代(同时这将使您能够在单个调用中注册多个事件)。
使用Object.Keys
,您可以通过参数对象进行迭代,就像它是一个数组一样。然后,您可以在触发事件时将键的值注册为条件。