6

私は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でどのように可能ですか?

4

1 に答える 1

20

お奨めはあなた自身を転がします。これが1つの方法です。

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
  }
};

おそらく、「removeListener」も追加する必要があります。これは、配列内のコールバックを見つけて配列から削除する必要があります(または、コールバックが指定されていない場合は、イベント全体のすべてのリスナーを削除する必要があります)。

于 2010-02-13T00:24:38.510 に答える