【发布时间】:2018-10-14 09:31:49
【问题描述】:
我正在尝试实现一个 EventEmitter 类,该类将用于在 MVC 组件之间发出事件。我对 JavaScript 的 MVC 模式相当陌生。
EventEmitter.js
export default class EventEmitter {
constructor() {
this._events = {};
}
static on(event, listener) {
(this._events[event] || (this._events[event] = [])).push(listener);
return this;
}
static emit(event, args) {
(this._events[event] || []).slice().forEach(listener => listener(args));
}
}
但是,无论我在哪里尝试发出一些事件,它都不起作用,因为我收到一条错误消息:
TypeError: (中间值).emit 不是函数
这就是我想从 ModelClass.js 发出事件的方式:
import EventEmitter from "../EventEmitter.js";
export default class ModelClass extends EventEmitter {
constructor(options) {
super();
super.emit('test', options);
}
请注意,我不想像上述情况那样调用发出函数,我在类中有不同的方法,我想发出我的事件,但为了更容易理解,我把它放在这里,因为它甚至不起作用在构造函数中。
【问题讨论】:
-
你把
emit设为static,这可能是问题所在——为什么不使用标准方法? -
哦!这可能是它!我把 static 放在那里是因为我正在调试发射器的最初问题,但不知何故,我可能修复了最初的问题,但“静态”关键字仍然存在..
标签: javascript events model-view-controller