カスタムイベントエミッタを作成しようとしています。以下のようにon
とemit
を置き換えることはできないようです。私はonTest
とemitTest
など異なる方法on
とemit
を割り当てる試みた EventEmitterを拡張できませんか?
- (その動作)
ここEventEmitter
を拡張するクラスです:
import { EventEmitter } from 'events'
export default class MyEventEmitter extends EventEmitter {
constructor() {
super()
this._on = this.on
this._emit = this.emit
delete this.on
delete this.emit
}
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')
また、これを試してみましたし、同じエラー受け取っ1 $ 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)
UPDATE:10
ここでは、スタックだこれらの継承されたメソッドを再定義するに
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')
「*私は他の変数にメソッドを割り当て、*それらを使用してみました」 - ?**なぜ**だけで実行しませんそれ。 – Bergi
"*オリジナルの削除*" - (やはり、なぜ?)プロトタイプメソッドなので、これを行うことはできません。 – Bergi
@Bergiは、あなたが 'UPDATE 1 '内のコードブロックに入れた内容を提案していますか? – ThomasReggi