是否可以将事件处理程序添加到 JavaScript 函数/类中

Is it possible to add event handlers to JavaScript functions/classes?

本文关键字:JavaScript 函数 类中 添加 程序 事件处理 是否      更新时间:2023-09-26

我正在尝试在JavaScript函数/类上注册事件,并试图使其尽可能接近下面的C#类。这有可能吗?

C#

public class MyClass
{
    public event EventHandler evtMyEvent;
    private void RaiseEvent()
    {
       if(evtMyEvent != null)
           evtMyEvent(this, new EventArgs());
    }
}
MyClass mc = new MyClass();
mc.evtMyEvent += (s,e) => { //Do Something };

.JS

function MyClass()
{
    // Add an event handler...
    this.raiseEvent = function(){
        // raise the event
    }
}
var mc = new MyClass();
//register for the event

这是完全可能的,您可以研究处理事件的众多库之一来检查它们的实现。

这是一个非常简单的草稿,不处理不侦听、事件类型、参数、范围、冒泡等:

function EventHandler(target) {  
  var listeners = [];
  this.add = function(handler) {
    listeners.push(handler);
  };
  this.fire = function() {
    for (var i=0; i<listeners.length; i++) {
      listeners[i].call(target);
    }
  };
}

function MyClass()
{
  this.name = 'myclass';
  // Add a private event handler...
  var eventHandler = new EventHandler(this);
  this.listen = function(f) {
    eventHandler.add(f);
  };
  this.raiseEvent = function(){
    eventHandler.fire();
  };
}
var mc = new MyClass();

mc.listen(function(){ console.log(this.name); });
mc.raiseEvent();

演示:http://jsbin.com/UCAseDi/1/edit

显然,对这个草案的修改很容易。如果您对其中任何一个有疑问,请告诉我,我会尽力帮助您。