簡體   English   中英

是否可以將事件處理程序添加到JavaScript函數/類?

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

我正在嘗試注冊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

顯然,對該草案進行更改很容易。 如果您在使用它們中的任何一個時遇到問題,請告訴我,我會盡力幫助您。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM