无法理解使用webpack和es6模块的EventEmitter发生了什么

杰夫

我试图同时学习webpack和es6,并意识到需要某种事件总线。我是EventEmitters和构造函数的新手。我已经阅读了文档和大量示例,但老实说,我不明白为什么下面的代码表现出它的行为方式。发射器只有一个实例,为什么计数器或removeListener不能找到任何东西?如果我将所有代码都放在一个文件中,则可以正常工作。

entry.js

import dVpEe from '../modules/eventEmitter';
const temp = new dVpEe();


var abc = function abc() {
    console.log('funciton a');
};

var b = function() {
    console.log('funciton b');
};

temp.evesdroppers('connection');
temp.hear('connection', abc);
temp.evesdroppers('connection');
temp.say('connection');
temp.hear('connection', b);
temp.evesdroppers('connection');
temp.say('connection');
temp.walk('connection', abc);
temp.say('connection');

eventEmitter.js

import events from 'events';
import util from 'util';

var EventEmitter = events.EventEmitter;

var dVpEe = function() {
    EventEmitter.call(this);
};

util.inherits(dVpEe, EventEmitter);

dVpEe.prototype.walk = function(event, cb, name) {
    console.log('%c' + (name || 'creeper') + '%c NOT listening for %c' + event, 'color: pink', 'color: white', 'color: pink');
    this.removeListener(event, cb);
};

dVpEe.prototype.say = function(event, name) {
    console.log('%c' + (name || 'someone') + '%c screamed %c' + event, 'color: pink', 'color: white', 'color: pink');
    this.emit(name);
};

dVpEe.prototype.evesdroppers = function(event) {
    var eventListeners = events.EventEmitter.listenerCount(this, event);
    console.log('%c' + eventListeners + '%c listner(s) for %c' + event, 'color: pink', 'color: white', 'color: pink');
};

dVpEe.prototype.hear = function(event, cb, name) {
    console.log('%c' + (name || 'creeper') + '%c listening for %c' + event, 'color: pink', 'color: white', 'color: pink');
    this.addListener(name, cb);
};

export default dVpEe;

输出

0 listner(s) for connection
creeper listening for connection
0 listner(s) for connection
someone screamed connection
function a
creeper listening for connection
0 listner(s) for connection
someone screamed connection
function a
funciton b
creeper NOT listening for connection
someone screamed connection
funciton a
funciton b
罗曼·帕拉迪耶夫

这只是的错字dVpEe.prototype.hear

dVpEe.prototype.hear = function(event, cb, name) {
    console.log((name || 'creeper') + ' listening for "' + event + "'");
    this.addListener(name, cb); // ouch!
};

我还建议将不推荐使用的内容 替换EventEmitter.listenerCountemitter.listenerCount

dVpEe.prototype.evesdroppers = function(event) {
    var eventListeners = this.listenerCount(event);
};

由于您使用的是ES6,因此我建议您使用class语法,该语法更易读:

import { EventEmitter } from 'events';

export default class extends EventEmitter {
  walk(event, cb, name) {
      console.log((name || 'creeper') + ' NOT listening for "' + event + "'");
      this.removeListener(event, cb);
  }

  // and so on
};

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

ES6 胖箭头函数参数无法理解

来自分类Dev

无法理解在FOREACH循环PHP的一部分中发生了什么

来自分类Dev

无法使用Webpack加载ES6模块

来自分类Dev

我无法理解这段代码中到底发生了什么。子集功能的最后争论是做什么的?

来自分类Dev

ES6无法在Webpack中导入JSX模块

来自分类Dev

无法理解有关ES6销毁的此摘要

来自分类Dev

grunt uglify js无法理解某些es6功能吗?

来自分类Dev

如何使用CommonJS模块将Webpack和ES6与依赖项一起使用?

来自分类Dev

在Webpack中将文件加载器与es6模块和打字稿一起使用

来自分类Dev

将调解器模式与webpack和ES6模块一起使用导入导出

来自分类Dev

使用webpack和ts-loader重新导出ES6模块

来自分类Dev

使用webpack将库输出为ES6模块?

来自分类Dev

Webpack仅限于使用ES6模块

来自分类Dev

在ES6类中使用EventEmitter

来自分类Dev

如何通过Webpack和6to5与es6模块一起使用npm软件包?

来自分类Dev

ES6模块:为什么“子”模块无法识别以前导出的模块?

来自分类Dev

使用ES6模块和Browserify的Rails资产管道

来自分类Dev

使用ES6模块和CoffeeScript的首选方式

来自分类Dev

使用ES6语法和动态路径导入模块

来自分类Dev

在webpack和es6中使用LESS

来自分类Dev

从 gulp、wiredep、gulp-inject 和 globs 迁移到 webpack 和 ES6 模块

来自分类Dev

无法理解此模块/类型错误

来自分类Dev

无法理解Rust模块系统

来自分类Dev

无法理解显示模块的行为

来自分类Dev

无法理解导入节点模块

来自分类Dev

browserify / requirejs模块和ES6模块之间有什么区别

来自分类Dev

Scalaz http模块发生了什么?

来自分类Dev

将ES6 let与firefox和angular一起使用时,无法实例化模块

来自分类Dev

ES6解构和模块导入

Related 相关文章

热门标签

归档