文档章节

Node.js 之使用util模块实现events的继承详解

造化玉碟
 造化玉碟
发布于 2014/05/09 11:24
字数 278
阅读 1846
收藏 1

    这是一个很重要的继承方式。使用util包模块的inherits方法来实现简单继承

  1. inherits的继承机制源码

exports.inherits = function(ctor,superCtor)
{
    ctor.super_=superCtor;
    ctor.prototype = Object.create(superCtor.prototype,{
       constructor :{
           value: ctor,
           enumerable: false,
           writable: true,
           configurable : true
       } 
    });
}

  inherits的实现新建了prototype一个指向superCtor.prototype的对象,ctor.prototype指向这个新对象。从而实现了从ctor>新prototype对象到->superCtor.prototype对象的链,从而实现了ctor继承superCtor.prototype的方法。

 2.实现继承

 这里ctor只继承了superCtor.prototype的方法,但superCtor本身的方法呢?咋承继?根据nodejs docs中的文档,看到若要完整的实现继承,还需要调用superCtor的call方法。但是还需要借助util工具包的inherits方法。

/**
 * Created by Antianlu on 14-5-9.
 */

var util = require('util');
var EventEmitter = require('events').EventEmitter;

function Person(){
    // 调用superCtor的call方法
    EventEmitter.call(this);
}
// 使用util工具包的inherits实现继承
util.inherits(Person,EventEmitter);

Person.prototype.getName = function()
{
    return this.name;
}

Person.prototype.setName = function(name)
{
    this.name = name;
}
Person.prototype.sendData = function(data)
{
    this.emit('data',data);
}

// 如何使用
var person = new Person();

console.log(person instanceof EventEmitter)//true
console.log(Person.super_ === EventEmitter) //true

person.on('data',function(data){
    console.log(data);
})
person.sendData('It works!');


  

© 著作权归作者所有

共有 人打赏支持
造化玉碟
粉丝 43
博文 45
码字总数 26950
作品 0
海淀
前端工程师
NodeJS中的事件(EventEmitter) API详解(附源码)

EventEmitter 简介 EventEmitter 是 NodeJS 的核心模块 中的类,用于对 NodeJS 中的事件进行统一管理,用 特定的 API 对事件进行添加、触发和移除等等,核心方法的模式类似于发布订阅。 实现...

文件:events.js
09/13
0
0
Node.js HTTP 使用详解

对于初学者有没有发觉在查看Node.js官方API的时候非常简单,只有几个洋文描述两下子,没了,我第一次一口气看完所以API后,对于第一个示例都有些懵,特别是参数里的request和response,究竟是...

造化玉碟
2014/04/29
0
2
从观察者模式到手写EventEmitter源码

观察者模式 观察者模式(observer)广泛的应用于javascript语言中,浏览器事件(如鼠标单击click,键盘事件keyDown)都是该模式的例子。设计这种模式背后的主要原因是促进形成低耦合,在这种...

恍然小悟
09/12
0
0
柏林纪行(中):Node.js Collaboration Summit

传送门: 柏林纪行(上):整体感受 柏林纪行(中):Node.js Collaboration Summit 柏林纪行(下):JSConf EU Node.js Collaboration Summit 比较沉重的思考写完,下面是比较轻松的部分了…...

_朴灵_
05/14
0
0
【深入浅出Node.js系列四】Node.js的事件机制

深入浅出Node.js系列 【深入浅出Node.js系列一】什么是Node.js 【深入浅出Node.js系列二】Node.js&NPM的安装与配置 【深入浅出Node.js系列三】深入Node.js的模块机制 【深入浅出Node.js系列四...

陶邦仁
2016/01/08
226
0

没有更多内容

加载失败,请刷新页面

加载更多

Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
今天
2
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
今天
13
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
5
0
Redis性能问题排查解决手册

一、性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 nfo命令输出的数据可...

IT--小哥
昨天
2
0
mixin混入

①新建mixin.js文件 const mixin = { methods: { /** * 分页公共方法 */ handleSizeChange(val) { this.pageData.size = val; this.query(); }, hand......

不负好时光
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部