暴力分析backbone.js(7)

上一節分析到,Backbone.Events.on方法的javascript

  return this;

  來看一張圖:java

  整個on方法,我把分紅了2個部分,在傳遞正確的參數的狀況下會執行褐紅色框框內的內容,褐紅色框框內的基本語法已經在上一節分析完了。可是咱們仔細想一想是否是缺了什麼?api

  1. 上面那段if語句還沒分析。
  2. 紅色框框內已經分析完畢基礎語法,可是還沒分析它爲什麼這樣寫?

  好,咱們先來分析它爲什麼這樣寫?數組

  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方法。

相關文章
相關標籤/搜索