事件是如何传递给javascript方法的
How is an event passed to a javascript method?
关于如何用javascript传递"人工"事件,有几个答案。
我不明白的是,传递给方法AND的事件是如何通过直接使用"event"变量来访问的,即使它似乎没有在任何地方声明。
有人能解释一下吗?
提前感谢
这里有一个基本的事件侦听器:
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)
相关文章:
- 从Javascript方法返回全局变量
- 简单的JavaScript方法链接
- 如何为javascript方法放入jquery确认对话框
- jquery插件或javascript方法自动调整文本输入(而非文本区域)(固定宽度)可变高度的大小
- 在类外重写Javascript方法,使用默认行为
- 使用 JavaScript 方法滚动
- 如何从窗体调用外部javascript方法
- 使用c#在Web服务器上运行JavaScript方法
- 如何从角度 js 调用 javascript 方法
- 在Node.js中,我在哪里可以看到JavaScript方法的源代码,例如hasOwnProperty
- 简单的javascript方法问题
- iframe未执行Javascript方法(PHP)
- Javascript 方法看不到对象变量
- 从HTML中的另一个文件访问javascript方法
- 如何测试只在闭包范围中可见的javascript方法
- 将php表转换为angularjs javascript方法
- 使用ScriptManager.RegisterStartupScript从代码隐藏调用javascript方法
- 如何从 MVC4 链接调用 Javascript 方法(错误 JavaScript 运行时错误:对象不支持此操作)
- Java eqivalent method of “splice(a,b,..)“在 JavaScript 方法中
- 在客户端 Javascript 方法之后运行服务器方法