發佈訂閱模式不是一個死的機制,他是一種思想,一種寫代碼的形式;主要爲了處理一對多的場景,應用於不一樣狀況下的不一樣函數的調用,this很重要編程
手動進行模擬瀏覽器事件機制bootstrap

改變this指向設計模式
處理順序問題的,其實根本就是處理IE事件池亂序問題,那麼咱們就不能用ie的事件池進行,咱們模擬一個事件池(利用發佈訂閱的思想來模擬咱們的事件池)promise
// 發佈 emit 訂閱 on {} function Girl() { this._events = {} } Girl.prototype.on = function (eventName,callback) { //這裏判斷他是否是第一次添加(訂閱) if(this._events[eventName]){ this._events[eventName].push(callback); }else{ this._events[eventName] = [callback] } }; Girl.prototype.emit = function (eventName,...args) { if(this._events[eventName]){ this._events[eventName].forEach(cb=>cb(...args)); } }; let cry = (who) =>{console.log(who+'哭');}; let shopping = (who) =>{console.log(who+'購物');}; let eat = (who) =>{console.log(who+'吃');}; let smile=(who)=>{console.log(who+'笑')}; let girl1 = new Girl(); girl1.on('失戀',cry); girl1.on('失戀',eat); girl1.on('失戀',shopping); girl1.emit('失戀','小明'); let girl2 = new Girl(); girl2.on('戀愛',shopping); girl2.on('戀愛',smile); girl2.emit('戀愛','小華');