最近使用event-emitter比较多,特地去查看了相关源码和加上自己的理解,写下点笔记,

各位大佬觉得写得有错的指教一下,谢谢。

参考资料:

Event emitter的监听事件:https://www.php.cn/xiaochengxu-391850.html

JS的EventEmitter使用步奏详解:https://www.php.cn/xiaochengxu-391849.html

javascript中apply、call和bind的区别:https://www.cnblogs.com/cosiray/p/4512969.html

发布订阅模式

DOM 的事件机制就是发布订阅模式最常见的实现,这大概是前端最常用的编程模型了,
监听某事件,当该事件发生时,监听该事件的监听函数被调用。

使用案例:

let emitter = new EventEmitter();

// 发布
emitter.emit("event:name-changed", { name: input.value });

// subscribe 订阅  相当于emitter.on
emitter.on("event:name-changed", data => {

let str = `Your name is: ${data.name}`;
  console.log(str)

});

运行顺序是:

emit(发布) - > apply或call (内部执行) -> on(订阅)

tip:

emit // 触发事件,并把参数传给事件的处理函数
on   // 监听event事件,获得emit传递的参数,触发时调用callback函数

javascript中apply、call和bind的区别

在JS中,这三者都是用来改变函数的this对象的指向的

var xh = {
  name : "小红",
  gender : "女",
  age : 18
}

对于call可以这样:
xw.say.call(xh);

对于apply可以这样:
xw.say.apply(xh);

而对于bind来说需要这样:
xw.say.bind(xh)();

call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,
因此后面还需要()来进行调用才可以。

意思是只要执行了call和apply,那么肯定会执行它们改变this指向的函数

总结:
所以event emitter并非是一直有个类似setinterval的东西提醒,
而是每一次emit就会触发apply或者call的执行,然后再触发on。

PS:多个组件同时监听一个事件,若同时触发事件,则可能某些组件不会执行该事件的回调。

Event-emitter (理解篇)相关推荐

  1. 一点就分享系列(理解篇_4+实践篇_2)”干货-全网最简且全”的理解!2020年了!您只知道GAN?ECCV超分论文“IRN” 全家桶大放送!!

    一点就分享系列(理解篇_4+实践篇_2)"最新干货"--2020 ECCV 超分论文之一"IRN"(更新中..) 最近开始了csdn坚持原创之旅,目前到了理解篇 ...

  2. 一点就分享系列(理解篇3)—Cv任务“新世代”之Transformer系列 (中篇-视觉模型篇DETR初代版本)

    一点就分享系列(理解篇3)-Cv任务"新世代"之Transformer系列 (中篇-视觉模型篇) 对于上篇介绍transformer得原理,自认为把细节讲得很详细了,作为" ...

  3. 一点就分享系列(理解篇3)—Cv任务“新世代”之Transformer(下篇)提前“cv领域展开”——快速学习“视觉transformer的理解”+“一些吐槽”

    一点就分享系列(理解篇3)Cv任务"新世代"之Transformer(下篇)--"cv领域展开" 提示:本篇内容为下篇,如感兴趣可翻阅上和中篇! 理解篇3 上 ...

  4. 一点就分享系列(理解篇5)Meta 出品 Segment Anything 4月6号版核心极速解读——主打一个”Zero shot“是贡献和辅助,CV依然在!

    一点就分享系列(理解篇5)Meta 出品 Segment Anything 通俗解读--主打一个"Zero shot"是贡献,CV依然在! 文章目录 一点就分享系列(理解篇5)Me ...

  5. Binder实用指南(一) - 理解篇

    这是关于Android Binder机制的一篇文章,Binder是Android里面非常重要的组成,也是最难理解的一块知识点,学习Binder最好的方法是深入源码阅读,因为Binder相关的知识错综复 ...

  6. 终于完全弄懂了KMP(个人理解篇)

    前阵子在学习KMP相关的内容,其他部分都挺好理解的,最后在next数组和k=next[k]这个递推公式上迷糊了好久,看了不少人写的博客,有的写着写着最后的结论又跳跃了,有的是写清楚了,但是感觉写的有过 ...

  7. php event loop,理解javascript中的事件循环(Event Loop)

    背景 在研究js的异步的实现方式的时候,发现了JavaScript 中的 macrotask 和 microtask 的概念.在查阅了一番资料之后,对其中的执行机制有所了解,下面整理出来,希望可以帮助 ...

  8. LQR的理解与运用 第一期——理解篇

    目录标题 0.本系列目的 理解 六个问题 运用 一阶倒立摆 matlab+simscape multibody实现 简单的轮足模型(二阶倒立摆) 1 理解LQR 写在前面 Q1:LQR控制的是什么 Q ...

  9. Oracle 中的 Incarnation 到底是个什么?概念理解篇

    高中时候,我深深"爱"上了一位女孩子.那个年纪确实不懂什么是真正的"爱",反正每天满脑子都是她,只要见到她就会紧张和激动,确切的说是深深的喜欢.你告诉我这叫初恋 ...

  10. Spring AOP面向切面编程:理解篇(一看就明白)

    一直想着怎么去通俗的讲解AOP,看了一篇文章受到了启发(https://blog.csdn.net/qukaiwei/article/details/50367761),下面我加入自己的理解,咱们来说 ...

最新文章

  1. ajax post forbidden,POST方法总是返回403 Forbidden
  2. boost::units模块实现测试数量之间的转换的测试程序
  3. 07/08_flink shell,基本原理及应用场景、特点、架构图、集群解剖、JobManager、TaskManagers、tasks和操作链、Session/job集群、组件介绍等、应用场景
  4. MySQL动态行转列
  5. Zookeeper----基本原理
  6. LIRe 源代码分析 3:基本接口(ImageSearcher)
  7. 图像欧拉数计算 matlab实现
  8. Java多线程系列--“JUC集合”02之 CopyOnWriteArrayList
  9. 基于JAVA优乐帮育儿系统计算机毕业设计源码+系统+数据库+lw文档+部署
  10. Qt QtabWidget设置背景色 设置标题栏颜色
  11. 10.27 正睿提高9
  12. VMware 虚拟机 linux执行 ifconfig 命令 eth0没有IP地址(intet addr、Bcast、Mask) UP BROADCAST MULTICAST 问题
  13. recon-ng详细使用教程
  14. 基于李雅普诺夫函数的跟踪控制(二)
  15. 深度:进入洗牌期的老年鞋市场对中国老年消费品行业的发展启示—足力健地位能否持续,奥康/红蜻蜓能否逆袭?
  16. Anaconda安装labelImg图像标注软件
  17. 【嵌入式】MSP430系统实时时钟RTC学习日志(完善中)
  18. mybatis foreach
  19. Symfony5 系列教程1-安装并认识symfony
  20. ei检索计算机科学与应用,国内EI检索的期刊有哪些?(计算机、信息方向) - 论文投稿 - 小木虫 - 学术 科研 互动社区...

热门文章

  1. Hunger Snake3
  2. 38 Power Query-背后的贤内助 M 语言
  3. Bzoj4484 [Jsoi2015]最小表示
  4. 为什么未来是全栈工程师的世界?
  5. C++核心准则边译边学-不必惊慌!
  6. app 原形设计常用工具总结
  7. 我梦见了画,然后画下了梦
  8. Android rom开发:recovery取消校验Vbmeta version和framework matrix
  9. 解决output directory already exists
  10. 微信公众号-服务器配置(token验证)