【问题标题】:Crafting my own event thrower in Javascript用 Javascript 制作我自己的事件抛出器
【发布时间】:2023-03-16 10:05:02
【问题描述】:

我(大部分)知道如何对生活在 DOM 中的各种对象引发的各种事件做出反应。

为了提高一点,我希望能够在适当的时候触发我自己的定制事件,我想我可以伪代码如下:

myObject = {
    prop:{ soAndSo }
    method : function(args){
        //do some stuff that takes forever
        "All done and ready, now tell the world"
    }
}

这个想法当然是我可以在以后的某个时间实例化一个 myObject,然后甚至稍后用一些效果来监控它的行为

aMyObject.onmyevent = function(event){
    //do something appropriate for the circumstance
}

问题是,关于“现在告诉世界”部分,我不知道从哪里开始。

你能给我指明正确的方向吗?

【问题讨论】:

标签: javascript events event-handling javascript-objects dom-events


【解决方案1】:

您需要创建一个虚假的 eventEmitter。这是我在遵循 Pluralsight 的一个名为 React and Flux for Angular Developers 的教程时制作的: Tutorial

对于您的问题,您通过发出事件来“告诉全世界”,这实际上是在调用您拥有的所有活跃的听众。

// make your own emitter:

function EventEmitter () {
  // holds events buy type; ex:'ADD_TODO'
  this._events = {};
}

EventEmitter.prototype.on = function(type, listener) {
  // add events to listen for
  this._events[type] = this._events[type] || [];
  this._events[type].push(listener);
};

EventEmitter.prototype.emit = function(type) {
  // emit event base on type
  if (this._events[type]) {
    this._event[type].forEach(function(listener) {
      // call listeners for events:
      listener();
    });
  }
};

EventEmitter.prototype.removeListener = function(type, listern) {
  if (this._events[type]) {
    this._events[type].splice(this._events[type].indexOf(listener), 1)
  }
};

【讨论】:

  • 非常感谢,这完美地回答了我的问题。
  • 太棒了!你能把它标记为正确答案吗?谢谢!!
  • 迟到总比没有好:我终于找到了复选标记。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-15
  • 1970-01-01
  • 2011-03-02
  • 2018-03-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多