0

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
4

1 に答える 1

1

それは完全に可能であり、イベントを処理する多くのライブラリの 1 つを調べて、それらの実装を確認できます。

これは、アンリッスン、イベント タイプ、引数、スコープ、バブリングなどを処理しない非常に単純なドラフトです。

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

もちろん、この草案は簡単に変更できます。いずれかで問題が発生した場合は、お知らせください。できる限りお手伝いさせていただきます。

于 2013-11-07T11:52:18.563 に答える