發佈訂閱模式其實一直存在於javascript的編程思想中,javascript的事件管理機制,從某種意義上來講,就是一個發佈訂閱模式。javascript
發佈訂閱模式的好處:java
能夠解決一些異步進行的代碼jquery
就算不解決異步問題,也能夠使代碼邏輯更清晰,更加具備結構化。編程
發佈訂閱模式應用場景:異步
須要用戶肯定是否執行該操做,才能決定代碼邏輯的下一步走向。this
爲了使代碼更加結構化,邏輯清晰,能夠自定義事件,而後用相似於jquery中的$("main").trigger("eventName")的機制去觸發。spa
如下是一個簡單實用的發佈訂閱模式的實現代碼:code
//events - a super-basic Javascript (publish subscribe) pattern var events = { events: {}, on: function (eventName, fn) { this.events[eventName] = this.events[eventName] || []; this.events[eventName].push(fn); }, off: function(eventName, fn) { if (this.events[eventName]) { for (var i = 0; i < this.events[eventName].length; i++) { if (this.events[eventName][i] === fn) { this.events[eventName].splice(i, 1); break; } }; } }, emit: function (eventName, data) { if (this.events[eventName]) { this.events[eventName].forEach(function(fn) { fn(data); }); } } };
用法以下:
on:綁定事件
off:取消綁定
emit:觸發事件blog