如何通过"仿真"有几个答案。 javascript中的事件。
我不明白的事件是如何通过直接使用" event"将事件传递给方法AND事件(如果没有传递)。变量,即使它似乎没有在任何地方声明。
有人可以解释一下吗?
提前致谢
答案 0 :(得分:1)
这是一个基本的事件监听器:
class EventCaller {
constructor() {
this.listeners = [];
}
addListener(obj) {
if (obj.trigger) { this.listeners.push(obj); }
}
trigger(event, ..data) {
this.listeners.forEach((listener) => listener.trigger(event, ...data));
}
}
class EventListener {
constructor() { this.eventsListeningTo = []; }
listenTo(item) {
if (!item.addListener) { throw new Error('Cannot add listener error'); }
item.addListener(this);
}
trigger(event, ...data) {
if (this[`on${event}`]) {this[`on${event}`](...data)}
}
onFoo({bar, foo}) {
console.log(bar, foo);
}
}
然后作为示例,您可以创建EventCaller
:
const eventAgg = new EventCaller();
然后创建一些事件监听器
const a = new EventListener();
const b = new EventListener();
然后a和b可以收听eventAgg
个事件
a.listenTo(eventAgg); b.listenTo(eventAgg);
所以如果现在我触发
eventAgg.trigger('Foo', {bar: 'lemons', foo: 42});
现在,a
和b
都会控制注销lemons, 42
,因为他们都在侦听该伪事件。
这只是基础知识。 jquery,Backbone,angular等都以不同的方式实现这一点(我确定),但这一切都归结为回调(甚至是新代码中的Promises)