Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/455.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript调度事件_Javascript_Javascript Events_Dispatcher - Fatal编程技术网

Javascript调度事件

Javascript调度事件,javascript,javascript-events,dispatcher,Javascript,Javascript Events,Dispatcher,嘿。。。我经常使用Flash,我的类使用EventDispatcher类,它允许我定义类的自定义事件。如何在javascript中实现这一点 我想这样做: var MyClass = function() { }; MyClass.prototype = { test : function() { dispatchEvent('ON_TEST'); } }; var mc = new MyClass(); mc.addEventListener('ON_TEST', handl

嘿。。。我经常使用Flash,我的类使用EventDispatcher类,它允许我定义类的自定义事件。如何在javascript中实现这一点

我想这样做:

var MyClass = function() {
};
MyClass.prototype = {
  test : function() {
    dispatchEvent('ON_TEST');
  }
};

var mc = new MyClass();
mc.addEventListener('ON_TEST', handler);
function handler() { alert('working...') }

Javascript怎么能做到这一点呢?

必须自己动手。这里只有一条路

var MyClass = function() {
    this._events = {};
};
MyClass.prototype = {
  addListener: function(eventName, callback) {
      var events = this._events,
          callbacks = events[eventName] = events[eventName] || [];
      callbacks.push(callback);
  },
  raiseEvent: function(eventName, args) {
      var callbacks = this._events[eventName];
      for (var i = 0, l = callbacks.length; i < l; i++) {
          callbacks[i].apply(null, args);
      }
  },
  test : function() {
    this.raiseEvent('ON_TEST', [1,2,3]); // whatever args to pass to listeners
  }
};
var MyClass=function(){
这个。_events={};
};
MyClass.prototype={
addListener:函数(eventName,回调){
var事件=此事件,
回调=事件[eventName]=事件[eventName]| |[];
callbacks.push(回调);
},
raiseEvent:函数(eventName,args){
var callbacks=this.\u事件[eventName];
for(var i=0,l=callbacks.length;i

您可能还应该添加一个“RemovelListener”,它必须在数组中找到回调并将其从数组中删除(或者,如果没有回调,则可能删除整个事件的所有侦听器)。

这很好,经过这么多年仍然是一个很好的解决方案:)快速问题,在addListener中,为什么要删除所有变量?无法执行
函数(eventName,callback){(this._events[eventName]=this._events[eventName]| |[])。推送(callback)},
?还是仅仅是可读性的问题?可读性,当然,为什么偏重聪明?但是,从技术上讲,你可以访问这个。