实现一个EventEmitter类,这个类包含以下方法: on/ once/fire/off
- function EventEmitter() {
- this.handlers = {}
- }
- //监听事件,该事件可以被触发多次
- EventEmitter.prototype.on = function (eventName, handle) {
- if (!this.handlers.hasOwnProperty(eventName)) {
- this.handlers[eventName] = []
- }
- this.handlers[eventName].push(handle)
- }
- //也是监听事件,但只能被触发一次
- EventEmitter.prototype.once = function (eventName, handle) {
- }
- //触发指定的事件
- EventEmitter.prototype.fire = function (eventName, ...params) {
- if (!this.handlers.hasOwnProperty(eventName)) return
- //事件队列依次执行
- this.handlers[eventName].map(handle => {
- handle(...params)
- })
- }
- //移除指定事件的某个回调方法或者所有回调方法
- EventEmitter.prototype.off = function (eventName, handle) {
- if (!this.handlers.hasOwnProperty(eventName)) return
- //获取下标,并删除
- let index = this.handlers[eventName].indexOf(handle)
- this.handlers[eventName].splice(index, 1)
- }
- const emitter = new EventEmitter();
- emitter.on('drink', (person) => {
- console.log(person + '喝水')
- })
- emitter.on('eat', (person) => {
- console.log(person + '吃东西')
- })
- // event.once('buy', (person) => {
- // console.log(person + '买东西')
- // })
- emitter.fire('drink', '我') // 我喝水
- emitter.fire('drink', '我') // 我喝水
- emitter.fire('eat', '其它人') // 其它人吃东西
- emitter.fire('eat', '其它人') // 其它人吃东西
- emitter.fire('buy', '其它人') //其它人买东西
- emitter.fire('buy', '其它人') //这里不会再次触发buy事件,因为once只能触发一次
- emitter.off('eat') //移除eat事件
- emitter.fire('eat', '其它人') //这里不会触发eat事件,因为已经移除了
实现一个EventEmitter类,这个类包含以下方法: on/ once/fire/off的更多相关文章
- “每日一道面试题”.Net中所有类的基类是以及包含的方法
闲来无事,每日一贴.水平有限,大牛勿喷. .Net中所有内建类型的基类是System.Object毋庸置疑 Puclic Class A{}和 Public Class A:System.Object ...
- python练习题-写一个函数,打印所有包含copy方法的内置对象
代码: #encoding=utf-8for i in dir(__builtins__): #print "i:",i try: #这里的i是个字符串,并不能直接用d ...
- C#类、接口、虚方法和抽象方法0322
虚拟方法和抽象方法有什么区别与联系: 1.抽象方法只有声明没有实现代码,需要在子类中实现:虚拟方法有声明和实现代码,并且可以在子类中重写,也可以不重写使用父类的默认实现. 2.抽象类不能被实例化(不可 ...
- Java基础-继承-编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight。小车类Car是Vehicle的子类,其中包含的属性有载人数 loader。卡车类Truck是Car类的子类,其中包含的属性有载重量payload。每个 类都有构造方法和输出相关数据的方法。最后,写一个测试类来测试这些类的功 能。
#29.编写一个Java应用程序,设计一个汽车类Vehicle,包含的属性有车轮个数 wheels和车重weight.小车类Car是Vehicle的子类,其中包含的属性有载人数 loader.卡车类T ...
- 编写一个类,其中包含一个排序的方法Sort(),当传入的是一串整数,就按照从小到大的顺序输出,如果传入的是一个字符串,就将字符串反序输出。
namespace test2 { class Program { /// <summary> /// 编写一个类,其中包含一个排序的方法Sort(),当传入的是一串整数,就按照从小到大的 ...
- 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Complex(int i,int j) 显示复数的方法:showComp()将其显示为如: 5+8i或5-8i 的形式。 求两个复数的和的方法:(参数是两个复数类对象,返回值是复数类对象)public Complex addComp(Compl
因标题框有限,题目未显示完整,以下再放一份: 定义一个复数(z=x+iy)类Complex,包含: 两个属性:实部x和虚部y 默认构造函数 Complex(),设置x=0,y=0 构造函数:Compl ...
- 一个完整的PHP类包含的七种语法说明
类中的七种语法说明 -属性 -静态属性 -方法 -静态方法 -类常量 -构造函数 -析构函数 <?php class Student { // 类里的属性.方法和函数的访问权限有 (函数和方法是 ...
- Hibernate的多表查询,分装到一个新的实体类中的一个方法
不知道是否还有其他方法实现,请高人指点. 如果涉及到多张表多字段查询,并且想利用查询出来的字段在界面层构建一个新的实体类,可以使用这种方法: 如果查询出来的多字段中,有多个字段的名字都相同(如想查询出 ...
- Cygwin 是一个用于 Windows 的类 UNIX shell 环境
cygwin的安装使用 Cygwin 是一个用于 Windows 的类 UNIX shell 环境. 它由两个组件组成:一个 UNIX API 库,它模拟 UNIX 操作系统提供的许多特性:以及 ...
随机推荐
- Android中Parcelable的原理和使用方法
Parcelable的简单介绍 介绍Parcelable不得不先提一下Serializable接口,Serializable是Java为我们提供的一个标准化的序列化接口,那什么是序列化呢? 进行And ...
- Sql 将A表数据插入到B表
A表和B表字段不同 --insert into B(Name,PersonalId,Education,IsDel) select Name, PersonId as PersonalId, ( ca ...
- SetDefaultDllDirectories问题
换台电脑编译报错! 在使用Visual Studio 2013编译程序的时候报以下错误 vc\atlmfc\include\atlcore.h(638): error C2039: “”: 不是“`g ...
- laravel5.6 基于redis,使用消息队列(邮件推送)
邮件发送如何配置参考:https://www.cnblogs.com/clubs/p/10640682.html 用到的用户表: CREATE TABLE `recruit_users` ( `id` ...
- PID算法知识点博文收藏记录
https://blog.csdn.net/Uncle_GUO/article/details/51367764 https://blog.csdn.net/HandsomeHong/article/ ...
- setattr(object, name, value)¶
This is the counterpart of getattr(). The arguments are an object, a string and an arbitrary value. ...
- JMS Activemq实战例子demo
上一篇已经讲了JMS的基本概念,这一篇来上手练一练,如果对JMS基本概念还不熟悉,欢迎参靠JMS基本概. 这篇文章所使用的代码已经不是我刚入手时的代码,已经经过我重构过的代码,便于理解,并且加了很多中 ...
- spring boot2.x集成spring security5与druid1.1.13(一)
版本: spring boot 2.1.2.RELEASE druid-spring-boot-starter 1.1.13 步骤: 一.maven ...
- Ubuntu下Arm-Linux-GCC交叉编译环境的搭建
1.下载arm-linux-gcc-3.4.1.tar.bz2到临时的目录下. 2.解压 arm-linux-gcc-3.4.1.tar.bz2 #tar -jxvf arm-linux-gcc-3. ...
- %各位大佬的博客.tql
线性基:https://www.cnblogs.com/ljh2000-jump/p/5869991.html#4219854 数位DP https://blog.csdn.net/jk211766 ...