我的编程空间,编程开发者的网络收藏夹
学习永远不晚

node.js自定义实现EventEmitter的方法是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

node.js自定义实现EventEmitter的方法是什么

这篇文章主要讲解了“node.js自定义实现EventEmitter的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“node.js自定义实现EventEmitter的方法是什么”吧!

一、是什么

我们了解到,Node采用了事件驱动机制,而EventEmitter就是Node实现事件驱动的基础。在EventEmitter的基础上,Node几乎所有的模块都继承了这个类,这些模块拥有了自己的事件,可以绑定/触发监听器,实现了异步操作。Node.js 里面的许多对象都会分发事件,比如 fs.readStream 对象会在文件被打开的时候触发一个事件。这些产生事件的对象都是 events.EventEmitter 的实例,这些对象有一个 eventEmitter.on() 函数,用于将一个或多个函数绑定到命名事件上。

二、nodejs中EventEmitter使用方法

Node的events模块只提供了一个EventEmitter类,这个类实现了Node异步事件驱动架构的基本模式――观察者模式
在这种模式中,被观察者(主体)维护着一组其他对象派来(注册)的观察者,有新的对象对主体感兴趣就注册观察者,不感兴趣就取消订阅,主体有更新的话就依次通知观察者们

const EventEmitter = require("events")class MyEmitter extends EventEmitter {}const myEmitter = new MyEmitter()function callback() {    console.log("触发了event事件!")}myEmitter.on("event", callback)myEmitter.emit("event")myEmitter.removeListener("event", callback);

三、实现过程

基本代码如下所示:

//事件派发机制(function() {    var EventDispatcher = function() {        var EventDispatcherClosure = function() {        };        EventDispatcherClosure.prototype = {                        on: function(key, fn) {                //获取当前的事件对象                var curEvents = this._getCurEvents(key);                //先检查该事件是否已经注册过了                var flag = false;                for (var i = 0, len = curEvents.length; i < len; i++) {                    if (curEvents[i].name == fn.name) {                        //已经出现过了,以最新注册的函数为主                        flag = true;                        curEvents[i] = fn;                        break;                    }                }                if (!flag) {                    curEvents[curEvents.length] = fn;                }                this._register(key, curEvents);            },                        dispatch: function(key) {                //获取当前的事件对象                var curEvents = this._getCurEvents(key);                var shouldDispatch = true;                for (var i = 0, len = curEvents.length; shouldDispatch && i < len; i++) {                    try {                        //获取参数                        var args = [];                        for (var j = 1, len1 = arguments.length; j < len1; j++) {                            args.push(arguments[j]);                        }                        shouldDispatch = curEvents[i].apply({}, args);                    } catch (e) {                        shouldDispatch = false;                    }                }                return shouldDispatch;            },            remove: function(key) {                if (this._getCurEvents(key)) {                    delete EventDispatcherClosure.events[key];                }            },                        _getCurEvents: function(key) {                return EventDispatcherClosure.events[key] || [];            },                        _register: function(key, events) {                EventDispatcherClosure.events[key] = events;            },        };        EventDispatcherClosure.events = {};        return {            create: function() {                return new EventDispatcherClosure();            }        };    };    window.EventDispatcher = new EventDispatcher().create();})();

首先定义一个全局变量的匿名函数,然后将全局变量挂在window上面,这样可以让我们在开发过程中的调用。在匿名函数的原型链上面添加事件分发、事件监听、事件删除等方法。

事件分发的调用

EventDispatcher.dispatch("test", obj)

事件监听

EventDispatcher.on("test", function callback(obj) {})

事件删除

EventDispatcher.on("test")

代码封装的比较简单

感谢各位的阅读,以上就是“node.js自定义实现EventEmitter的方法是什么”的内容了,经过本文的学习后,相信大家对node.js自定义实现EventEmitter的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

node.js自定义实现EventEmitter的方法是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

node.js自定义实现EventEmitter的方法是什么

这篇文章主要讲解了“node.js自定义实现EventEmitter的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“node.js自定义实现EventEmitter的方法是什么”吧
2023-07-04

node.js怎么自定义实现EventEmitter

这篇文章主要介绍了node.js怎么自定义实现EventEmitter的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇node.js怎么自定义实现EventEmitter文章都会有所收获,下面我们一起来看看吧。一
2023-06-17

node.js怎么自定义实现一个EventEmitter

这篇文章主要介绍“node.js怎么自定义实现一个EventEmitter”,在日常操作中,相信很多人在node.js怎么自定义实现一个EventEmitter问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”n
2023-06-20

android自定义dialog的方法是什么

Android中自定义Dialog的方法有以下几种:1. 创建一个继承自Dialog类的自定义对话框:- 创建一个新的类,继承自Dialog类。- 在构造方法中设置对话框的样式和布局,以及其他需要自定义的属性。- 可以通过重写onCreat
2023-09-21

C/C++ QT实现自定义对话框的方法是什么

这篇文章主要讲解了“C/C++ QT实现自定义对话框的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C/C++ QT实现自定义对话框的方法是什么”吧!对话框分为多种,常见的有通用对
2023-06-21

Android自定义View实现体重表盘的方法是什么

本篇内容介绍了“Android自定义View实现体重表盘的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!效果视频分析起始角度如下图
2023-06-25

vue3自定义指令的方法是什么

这篇文章主要介绍“vue3自定义指令的方法是什么”,在日常操作中,相信很多人在vue3自定义指令的方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”vue3自定义指令的方法是什么”的疑惑有所帮助!接下来
2023-07-04

mysql自定义字段的方法是什么

在MySQL中,可以通过以下两种方法来自定义字段:1. 使用计算字段:- 计算字段是使用表中已有字段计算出来的结果。可以使用算术运算符、字符串函数、日期函数等对已有字段进行操作,并将结果作为计算字段返回。- 计算字段在查询时动态计算,不会在
2023-09-25

Java自定义异常的方法是什么

本文小编为大家详细介绍“Java自定义异常的方法是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Java自定义异常的方法是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。一、异常分为哪几种异常分为两种,分
2023-07-06

mysql自定义函数的方法是什么

在MySQL中,可以使用以下步骤来创建自定义函数:1. 创建函数:使用`CREATE FUNCTION`语句来创建函数,并指定函数的名称、参数列表和返回值的数据类型。例如:```sqlCREATE FUNCTION 函数名(参数列表) RE
2023-09-11

winform自定义控件的方法是什么

要创建一个自定义控件,你需要按照以下步骤进行操作:创建一个新的类并继承自System.Windows.Forms.Control类或者更具体的控件(如Button、Label等)。在类中添加需要的属性、方法和事件。重写基类的一些方法,比
winform自定义控件的方法是什么
2024-04-09

linux自定义信号的方法是什么

在Linux中,可以使用以下方法来自定义信号:1. 使用`signal()`函数:可以使用`signal()`函数来设置信号处理程序。该函数的原型如下:```cvoid (*signal(int signum, void (*handler
2023-08-12

android自定义控件的方法是什么

Android自定义控件的方法有以下几种:1. 继承系统控件:可以通过继承系统控件来进行扩展和定制。通过重写控件的绘制方法,修改控件的样式、行为或添加新的功能。2. 组合已有控件:可以通过将多个现有的控件组合在一起,形成一个新的复合控件。可
2023-08-16

qt自定义表格的方法是什么

在Qt中,可以使用QTableView类来创建和操作表格。下面是一些自定义表格的方法:1. 设置表格模型:使用QStandardItemModel类或自定义的QAbstractTableModel类创建表格模型,并使用setModel()方
2023-09-29

C++类的定义与实现方法是什么

这篇文章主要讲解了“C++类的定义与实现方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“C++类的定义与实现方法是什么”吧!一、类的定义根据C++ Primer中的描述,类的定义是一
2023-06-22

mfc自定义控件的方法是什么

MFC(Microsoft Foundation Class)是一种用于开发Windows桌面应用程序的C++框架。MFC提供了一组类和函数,用于简化Windows应用程序的开发。要创建自定义控件,可以按照以下步骤进行:1. 创建一个继承自
2023-09-07

pgsql自定义排序的方法是什么

在 PostgreSQL 中,可以通过创建自定义排序规则来实现自定义排序。以下是实现自定义排序的一般方法:创建自定义排序规则函数:首先,您需要创建一个函数来定义您的自定义排序规则。这个函数会接收两个参数,比较它们并返回一个整数值,表示它们的
pgsql自定义排序的方法是什么
2024-04-09

vue3自定义指令方法是什么

这篇文章主要讲解了“vue3自定义指令方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“vue3自定义指令方法是什么”吧!一、注册自定义指令以下实例都是实现一个输入框自动获取焦点的自定
2023-06-21

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录