上一節分析到,Backbone.Events.on方法的javascript
return this;
來看一張圖:java
整個on方法,我把分紅了2個部分,在傳遞正確的參數的狀況下會執行褐紅色框框內的內容,褐紅色框框內的基本語法已經在上一節分析完了。可是咱們仔細想一想是否是缺了什麼?api
好,咱們先來分析它爲什麼這樣寫?數組
on方法的最基礎寫法:須要一個對象,它必須'融合'(融合這個詞是我複製中文api的)Backbone.Events(綁定功能),說白了就是要能夠用Events的功能。 我看一下最基本的2個參數,自定義事件名 && callback回調函數。(還有其餘可選參數,暫且無論)函數
想一想 自定義事件名 && 回調函數 在on方法是如何儲存的?this
先給做用域聲明一個屬性 _events。它是一個對象 cc._events = {}spa
在給做用域下的屬性_events,建立個[自定義函數名]的屬性。它是保存一個數組地址的屬性,因此它指向一個數組。爲何要用鍵值來建立,有沒有想過,若是用_events.name能夠建立?不能夠,name是一個形參,它保存着一個字符串。若是用鍵值的話,[變量],會把轉換變量。3d
cc._events['console'] = []對象
試着用 對象.變量(字符串) 來建立一個屬性,而且訪問 blog
用鍵值 對象[變量(字符串)]來建立一個屬性,而且訪問
而後用回調函數push到數組裏。cc._events['console'] = [{callback:function(){console.log('cc')}}]
看到到這段代碼cc._events['console'] = [{callback:function(){console.log('cc')}}]有何想法?
可不能夠,不經過.trigger('console')來調用它,又或者不經過on來自定義事件,而後來調用?
爲何要用數組來存儲回調函數呢?留一個懸念!
還有一件事你們有沒有發現一個冗餘的地方,爲何要多建立一個events的變量來引用(對象._events[自定義函數]的數組地址)呢?試着去掉events這個變量,而後來運行一下,結果仍是跑得通的,就是不知道有什麼隱患!!
去掉變量後,在來看一下這2行代碼
有沒有想過,我建立一個新對象,賦予它Events的功能後,調用on方法:這2句表達式第一次所執行的都是後者,那怎麼觸發前者,前者有什麼意義呢,固然有意義。來看如何觸發。
this._events 有值的時候即觸發它,咱們建立過一個自定義函數之後,在建立一個自定義函數,就會觸發 前者。
this._events[name] 有值的時候即觸發它,別說不可能,咱們給一個對象綁定2個一樣名字的自定義函數,結果呢,是否是觸發 前者?
結果是 click1 click2
到這裏,還記得前面的懸念?爲何要用數組來存儲回調函數呢?
這樣就說得通了,由於同個自定義方法名,存儲不一樣的回調函數。
假設不用trigger方法,該如何調用同個自定義方法的回調函數呢?
解決思路:經過遍歷數組長度來執行對象的回調函數。
好,休息一下,下一節咱們分析完on方法,接着分析trigger方法。