EventTarget源码分析

如果转载本文,请注明出处!

从这个类的命名上就可已看出,这是一个接收站,是事件的目的地。注意,我并未说EventTarget是事件的终点。事件的本质是信息,事件的作用是交流。一个事件的生命周期是如何的呢?
  1. 创建交流通道。这个步骤有两个工作必须完成。第一个工作是约定信息的格式,第二个是设立地址。
  2. 发送方对信息进行编码、把信息转换成事件。
  3. 信息发送到目的地。
  4. 接收放对事件进行解码、把事件还原程信息。

前文使用人类语言描述了事件的生命周期,下文将人类语言转换为计算机语言。

  1. 设计、实现Event的子类XXXEvent;设计、实现EventTarget子类XXXEventTarget。
  2. 创建XXXEvent类型的对象。
  3. XXXEvent类型的对象存入EventQueue中。
  4. XXXEventTarget使用监听器处理事件。

EventTarget在步骤1中提供了注册监听器的接口。从事件目的地角度来看,只要有监听器,就可以正确地把事件翻译成信息。EventTarget在步骤4中提供了获取监听器的接口。因此,EventTarget的主要功能就是记录监听器。

个人觉得已经将EventTarget的功能说明白了。下面看一下EventTarget的具体功能。

  • 维护了引用计数。可以使用ref来增加引用计数,使用deref来减少引用计数。
  • 使用InterfaceName获得名称,常见的名称有"Node", "DOMApplicationCache"等。一般与w3c标准中定义的相同。具体的可以查看动态生成的EventTargetInterfaces.h文件。
  • 使用toNode方法,将EventTarget对象转换为Node对象。如果此EventTarget对象并非Node对象,那么返回值为0。
  • 使用toDOMWindow方法,将EventTarget对象转换为DOMWindow对象。如果此EventTarget对象并非DOMWindow对象,那么返回值为0。
  • 使用addEventListener、removeEventListener、removeAllEventListeners管理监听器。
  • 使用setAttributeEventListener、clearAttributeEventListener、getAttributeEventListener管理属性事件监听器。属性事件没有capture状态。
  • 判断是否有监听器。
  • 使用dispatchEvent来分发事件。这个分发是指将事件传递给AT_TARGET监听器
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值