function pubsub(){
var events = {};
var self = this;
self.on = registerEvent;
self.emit = triggerEvent;
function registerEvent(eventName,eventCb){
if(events[eventName] === undefined){
events[eventName] = {
'counter' : 0,
'subscribers': {},
'length' : 0
}
}
var counter = events[eventName].counter++;
events[eventName].subscribers[counter] = eventCb;
events[eventName].length = Object.keys(events[eventName].subscribers).length;
var unsubscribeObj = unsubscribe.bind(eventName,counter);
return {'unsubscribe':unsubscribeObj};
}
function triggerEvent(eventName,param){
if(events[eventName] !== undefined && events[eventName].length){
var eventList = Object.keys(events[eventName].subscribers);
for(var index in eventList){
var eventKey = eventList[index];
events[eventName].subscribers[eventKey].apply({},param);
}
}
}
function unsubscribe(eventName,counter){
if(events[eventName].subscribers[counter] !== undefined){
delete events[eventName].subscribers[counter];
events[eventName].length = Object.keys(events[eventName].subscribers).length;
}else{
console.warn("Event not subscribed");
}
}
}
我想寫一個pubsub程序。除了 取消訂閱功能,一切正常。JS參數綁定不起作用
var unsubscribeObj = unsubscribe.bind(eventName,counter);
return {'unsubscribe':unsubscribeObj};
給退訂我傳遞參數拋出綁定,但它不工作時,從外面打電話。
var pObj = new pubsub(); // Works Fine
var e1 = pObj.on('event1',function(data){ alert(data); });
pObj.emit('event1',["hi"]);
e1.unsubscribe()
遺漏的類型錯誤:無法讀取屬性「用戶」的未定義
這不是它未定義的原因。 –
我正在閱讀你的答案。也許我錯了,但我認爲這是一個改進:)然而,感謝您的評論 –
沒有當我在那裏添加斷點eventName和計數器有一些無效的數據.. – balaphp