在javascript中模拟类似C#的事件

我想在JavaScript中模拟C#的事件:我想要做的是这样的事情:

假设我有以下代码:

function addToInvocationList(method, listener) { *Some code to add listener to the invocation list of method* } function MyClass() { } MyClass.prototype.Event = function() {} var my_class_obj = new MyClass(); function subscriberFunction1() {} function subscriberFunction2() {} function subscriberFunction3() {} addToInvocationList(my_class_obj.Event, subscriberFunction1); addToInvocationList(my_class_obj.Event, subscriberFunction2); addToInvocationList(my_class_obj.Event, subscriberFunction3); my_class_obj.Event(); 

我想要做的是当我调用my_class_obj.Event时,所有订阅的函数都被调用。

这可以纯粹用JavaScript实现,还是需要通过DOM事件找到方法?

如何编写单独的事件类:参考链接: http : //alexatnet.com/articles/model-view-controller-mvc-javascript

 function Event(sender) { this._sender = sender; this._listeners = []; } Event.prototype = { attach: function (listener) { this._listeners.push(listener); }, notify: function (args) { for (var i = 0; i < this._listeners.length; i++) { this._listeners[i](this._sender, args); } } }; 

而你的我的class级。 例如:

 function MyClass(name) { var self = this; self.Name = name; self.nameChanged = new Event(this); self.setName = function (newName){ self.Name = newName; self.nameChanged.notify(newName); } } 

订阅活动示例代码:

 var my_class_obj = new MyClass("Test"); my_class_obj.nameChanged.attach(function (sender,args){ }); my_class_obj.setName("newName"); 

您可以附加更多事件处理程序,并且将调用所有这些事件处理程序。 您还可以根据需要添加更多事件:例如addressChanged事件。 这种方法也模拟c#事件(发送者和args)

您可以编写自己的观察者(发布者 – 订阅者)阅读GOF。 或者,如果使用jQuery,自定义事件( http://api.jquery.com/trigger/ )可以帮助您。