我正在尝试在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
答案 0 :(得分: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();
DEMO:http://jsbin.com/UCAseDi/1/edit
显然,这个草案的修改很容易。如果您遇到任何一个问题,请告诉我,我会尽力帮助您。