OurJS


OurJS-我们的JS, 我们的技术-IT文摘; 专注JS相关领域;
我们热爱编程, 我们热爱技术;我们是高大上, 有品味的码农;

欢迎您订阅我们的技术周刊


我们会向您分享我们精心收集整理的,最新的行业资讯,技术动态,外文翻译,热点文章;
我们使用第三方邮件列表向您推送,我们不保存您的任何个人资料,注重您的隐私,您可以随时退订,

欢迎分享您的观点,经验,技巧,心得

让我们一起找寻程序员的快乐,探索技术, 发现IT人生的乐趣;


本网站使用缓存技术每次加载仅需很小流量, 可在手机中流畅浏览;
如果您发现任何BUG,请即时告知我们: ourjs(at)ourjs.com

Node.JS通过原型和类继承EventEmitter,实现收发事件的几种方法


分享到
分类 JS学习   关键字 JavaScript   发布 ourjs  1491447521551
注意 转载须保留原文链接,译文链接,作者译者等信息。  
Node.js是基于V8引擎实现的事件驱动无阻塞IO构架,Node.js能够在众多的后端JavaScript技术之中脱颖而出,正是因其基于事件的特点而受到欢迎。

这里主要介绍如何使用EventEmitter类来实现事件的发送与接收。


原型继承法


虽然,原型继承经常被视作 JavaScript 的一个弱点,但事实上,原型继承模型比经典的继承模型更强大。举例来说,在原型继承模型的基础之上建立一个经典的继承模型是相当容易的。

JavaScript 对象是动态的属性“包”(指其自己的属性)。JavaScript 对象有一个指向一个原型对象的链。当试图访问一个对象的属性时,它不仅仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依此层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。

通过原型链实现继承:

var EventEmitter  = require('events').EventEmitter
function Client() {
  EventEmitter.call(this);
}
Client.prototype.auth = function() {
  console.log('arguments')
}
Client.prototype.__proto__ = EventEmitter.prototype;
var client = new Client();
//接收事件
client.on('auth', client.auth)
//发送事件
client.emit('auth')

类继承法


ES6提供了class和 extends两个关键字来实现继承,相对于原型继承。虽然只是语法糖,但它的语法确实更为简洁,也更符合面向对象语言的语法习惯。

var EventEmitter  = require('events').EventEmitter

class Client extends EventEmitter {
  constructor() {
    super()
  }
  auth() {
  console.log('arguments')
  }
}
let client = new Client()
//接收事件
client.on('auth', client.auth)
//发送事件
client.emit('auth')


对象继承法


有时侯你也许并不需要创建一个类,而只需要对某个对象添加对象收发机制,此时只需要重新指定原型链即可。

var EventEmitter  = require('events').EventEmitter

var client = {
  auth() {
    console.log('arguments')
  }
};
client.__proto__ = EventEmitter.prototype;
// Subscribe to event.
client.on("auth", client.auth);
// Emit event.
client.emit("auth");


社区评论 ( Beta版 )
OnceDoc 您自己的企业内容管理系统——文档、流程、知识库、报表、网盘All In One

访问404页面,寻找丢失儿童
 热门文章 - 分享最多
  1. JavaScript使用ES6的Class面向对象继承时 this is not defined 解决方法
  2. Github Pages疑似被封: 再也不能用Pages搭建个人博客了
  3. JavaScript条形码生成和扫码识别(Barcode scan)开源库
  4. 关于华为优化30、40老员工的争议
  5. OnceVI前后端分离的数据可视化报表工具简介
  6. TCP/UDP协议比较:在Node.JS中UDP服务器和客户端通信示例
  7. 2016 年崛起的 JS 项目
  8. 如何基于SVG矢量图制作一个可填写信息的可视化表单-OnceVI
  9. OnceVI报表制作入门—如何将用户的json数据可视化成名片展示
  10. 周鸿祎:一些程序员没有商业意识,却又很自负,一看就知道不会创业
  11. AirJD-简单好用的免费建站工具

 相关阅读 - JS学习
  1. 可视化Web报表OnceVI中用户输入表单验证与提交
  2. Web报表OnceVI如何制作条形码与打印二维码(Barcode/Qrcode)
  3. 如何基于SVG矢量图制作一个可填写信息的可视化表单-OnceVI
  4. OnceVI报表制作入门—如何将用户的json数据可视化成名片展示
  5. OnceDB支持全文搜索和关系查询的Redis内存数据库:驱动安装及使用教程
  6. 在OnceIO(Node.JS)中用Redis储存Session
  7. OnceIO的模块拦截与注入:模板文件路由重定向与Model数据改写
  8. OnceIO模块开发:模块注册、模块路由、静态文件重定向以及如何开发与设计一个功能扩展模块
  9. 少年,不要滥用箭头函数啊:JS中lambda表达式的优缺点和使用场景
  10. NodeJS教程:基于OnceIO框架实现文件上传和验证

 关键字 - JavaScript
  1. 少年,不要滥用箭头函数啊:JS中lambda表达式的优缺点和使用场景
  2. 什么是Ajax? 详解原生js ajax
  3. 用原生HTML5控件实现输入框自动提示(下拉列表补全)功能
  4. NodeBots-JavaScript在智能设备驱动(物联网)中的崛起
  5. decodeURIComponent有个BUG,当浏览器请求地址含%+数字时,会解析错误
  6. Linux下用node.js提取Word(doc/docx)/PDF文本内容
  7. JavaScript的设计缺陷?浮点运算:0.1 + 0.2 != 0.3
  8. 用JavaScript获取当月第一天和最后一天
  9. JavaScript中NaN的秘密
  10. JavaScript也有getter/setter方法:ES5 Object对象的5个不为人知的特性

 欢迎订阅 - 技术周刊

我们热爱编程, 我们热爱技术; 我们是高端, 大气, 上档次, 有品味, 时刻需要和国际接轨的码农; 欢迎您订阅我们的技术周刊; 您只需要在右上角输入您的邮箱即可; 我们注重您的隐私,您可以随时退订.
加入我们吧! 让我们一起找寻码农的快乐,探索技术, 发现IT人生的乐趣;


 关注我们

我们的微信公众号: ourjs-com
打开微信扫一扫即可关注我们:
IT文摘-程序员(码农)技术周刊

ourjs官方微信号