如何将事件传递给javascript方法?

时间:2016-04-18 18:42:14

标签: javascript events

如何通过"仿真"有几个答案。 javascript中的事件。

我不明白的事件是如何通过直接使用" event"将事件传递给方法AND事件(如果没有传递)。变量,即使它似乎没有在任何地方声明。

有人可以解释一下吗?

提前致谢

1 个答案:

答案 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});

现在,ab都会控制注销lemons, 42,因为他们都在侦听该伪事件。

这只是基础知识。 jquery,Backbone,angular等都以不同的方式实现这一点(我确定),但这一切都归结为回调(甚至是新代码中的Promises)