Javascript调度事件
嘿。。。我经常使用Flash,我的类使用EventDispatcher类,它允许我定义类的自定义事件。如何在javascript中实现这一点 我想这样做:Javascript调度事件,javascript,javascript-events,dispatcher,Javascript,Javascript Events,Dispatcher,嘿。。。我经常使用Flash,我的类使用EventDispatcher类,它允许我定义类的自定义事件。如何在javascript中实现这一点 我想这样做: var MyClass = function() { }; MyClass.prototype = { test : function() { dispatchEvent('ON_TEST'); } }; var mc = new MyClass(); mc.addEventListener('ON_TEST', handl
var MyClass = function() {
};
MyClass.prototype = {
test : function() {
dispatchEvent('ON_TEST');
}
};
var mc = new MyClass();
mc.addEventListener('ON_TEST', handler);
function handler() { alert('working...') }
Javascript怎么能做到这一点呢?必须自己动手。这里只有一条路
var MyClass = function() {
this._events = {};
};
MyClass.prototype = {
addListener: function(eventName, callback) {
var events = this._events,
callbacks = events[eventName] = events[eventName] || [];
callbacks.push(callback);
},
raiseEvent: function(eventName, args) {
var callbacks = this._events[eventName];
for (var i = 0, l = callbacks.length; i < l; i++) {
callbacks[i].apply(null, args);
}
},
test : function() {
this.raiseEvent('ON_TEST', [1,2,3]); // whatever args to pass to listeners
}
};
var MyClass=function(){
这个。_events={};
};
MyClass.prototype={
addListener:函数(eventName,回调){
var事件=此事件,
回调=事件[eventName]=事件[eventName]| |[];
callbacks.push(回调);
},
raiseEvent:函数(eventName,args){
var callbacks=this.\u事件[eventName];
for(var i=0,l=callbacks.length;i
您可能还应该添加一个“RemovelListener”,它必须在数组中找到回调并将其从数组中删除(或者,如果没有回调,则可能删除整个事件的所有侦听器)。这很好,经过这么多年仍然是一个很好的解决方案:)快速问题,在addListener中,为什么要删除所有变量?无法执行
函数(eventName,callback){(this._events[eventName]=this._events[eventName]| |[])。推送(callback)},
?还是仅仅是可读性的问题?可读性,当然,为什么偏重聪明?但是,从技术上讲,你可以访问这个。