Javascript 无法扩展EventEmitter?

Javascript 无法扩展EventEmitter?,javascript,node.js,events,Javascript,Node.js,Events,我正在尝试创建一个自定义事件发射器。似乎我无法替换on和emit,如下所示 我曾尝试将这些方法分配给其他变量并使用它们,但删除原始变量不起作用 我尝试过将on和emit分配给不同的方法,比如onTest和emitTest,它们都可以工作 下面是扩展EventEmitter的类: 这是堆栈: $ babel-node ./src/event-store/my-event-emitter.js /Users/thomas/.nvm/versions/node/v5.10.0/lib/node_mo

我正在尝试创建一个自定义事件发射器。似乎我无法替换on和emit,如下所示

我曾尝试将这些方法分配给其他变量并使用它们,但删除原始变量不起作用 我尝试过将on和emit分配给不同的方法,比如onTest和emitTest,它们都可以工作 下面是扩展EventEmitter的类:

这是堆栈:

$ babel-node ./src/event-store/my-event-emitter.js 
/Users/thomas/.nvm/versions/node/v5.10.0/lib/node_modules/babel-cli/node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.values.js:0



RangeError: Maximum call stack size exceeded
    at Object.propertyIsEnumerable (native)
    at /Users/thomas/.nvm/versions/node/v5.10.0/lib/node_modules/babel-cli/node_modules/babel-polyfill/node_modules/core-js/modules/_object-to-array.js:12:32
    at values (/Users/thomas/.nvm/versions/node/v5.10.0/lib/node_modules/babel-cli/node_modules/babel-polyfill/node_modules/core-js/modules/es7.object.values.js:7:12)
    at MyEventEmitter.emit (my-event-emitter.js:15:28)
    at MyEventEmitter.emit (my-event-emitter.js:15:16)
    at MyEventEmitter.emit (my-event-emitter.js:15:16)
    at MyEventEmitter.emit (my-event-emitter.js:15:16)
    at MyEventEmitter.emit (my-event-emitter.js:15:16)
    at MyEventEmitter.emit (my-event-emitter.js:15:16)
    at MyEventEmitter.emit (my-event-emitter.js:15:16)
更新1

还尝试了此操作,但收到了相同的错误:

import { EventEmitter } from 'events'

export default class MyEventEmitter extends EventEmitter {
  constructor () {
    super()
  }
  on () {
    this.on.apply(this, Object.values(arguments))
  }
  emit () {
    this.emit.apply(this, Object.values(arguments))
  }
}

let event = new MyEventEmitter()

event.on('hi', () => console.log('meow'))

event.emit('hi')

您试图重新定义这些继承方法的结果是。\u emit===this.emit,这反过来会在调用中产生无限递归

如果您想覆盖方法,您应该这样做。无需将它们重新分配给其他名称,也无需尝试删除实例甚至没有的属性

export default class MyEventEmitter extends EventEmitter {
  on(...args) {
    return super.on(...args)
  }
  emit(...args) {
    return super.emit(...args);
  }
}

我认为那些Object.values调用是毫无意义的

您试图重新定义这些继承的方法,结果是这样的。_emit===this.emit,这反过来又在调用中产生无限递归

如果您想覆盖方法,您应该这样做。无需将它们重新分配给其他名称,也无需尝试删除实例甚至没有的属性

export default class MyEventEmitter extends EventEmitter {
  on(...args) {
    return super.on(...args)
  }
  emit(...args) {
    return super.emit(...args);
  }
}

我想那些Object.values调用是没有意义的

我尝试过将这些方法分配给其他变量并使用它们-为什么?别那么做。删除原件-再说一遍,为什么?您不能这样做,因为它们是原型方法。@Bergi您是在建议我刚才在UPDATE 1的代码块中放入的内容吗?不完全是,它们应该是超级调用。请看我的答案:-我尝试过将这些方法分配给其他变量并使用它们-为什么?别那么做。删除原件-再说一遍,为什么?您不能这样做,因为它们是原型方法。@Bergi您是在建议我刚才在UPDATE 1的代码块中放入的内容吗?不完全是,它们应该是超级调用。请参阅我的答案:-如果我想在构造函数中设置此属性,我在这里该怎么做?不给super打电话是没办法的。@ThomasReggi:当然,这不是问题。我只是在这里省略了默认构造函数,因为您还没有创建自定义属性。但是如果不调用super,我就无法拥有构造函数并设置此属性。在super之前不允许出现此错误。是的,只需调用super!为什么要避免它?如果要在构造函数中设置此属性,我在这里该怎么做?不给super打电话是没办法的。@ThomasReggi:当然,这不是问题。我只是在这里省略了默认构造函数,因为您还没有创建自定义属性。但是如果不调用super,我就无法拥有构造函数并设置此属性。在super之前不允许出现此错误。是的,只需调用super!你为什么要回避它?