先從 BackboneJS 開始提及。BackboneJS 設計的比較好的一部分代碼就是事件相關的內容,傳送門:
http://backbonejs.org/docs/backbone.html#section-13javascript
jQuery 裏面用到最多的就是bind相關的操做,爲一個按鈕綁定點擊事件,給他解綁一個事件或者解綁全部事件,這一類的事件都是面向Dom對象。富應用中還須要一類孤立於DOM的事件,他們也須要相似添加事件、刪除事件、解綁事件和觸發事件。例如監測URL的變化,在其餘地方可能綁定了不少事件,可是真實變化的時候只須要觸發一下邊能執行全部方法。html
最終我本身框架裏面寫的事件很大部分參考了 BackboneJS ,具體代碼傳送門:
https://github.com/vincenting/HaiyiYun/blob/master/src/vintjs.js#L175java
主要的功能包括綁定 on ,解綁 off ,觸發 trigger 。on 最終期待的參數是(事件名稱,回調函數,回調函數上下文),off最終期待的參數是(事件名稱[,回調函數][,回調函數上下文]),trigger 最終期待的參數是(時間名稱[,args...])。可是爲了靈活,還須要一些靈活的參數,例如時間名稱容許是多個事件名稱以空格分開,以及以對象的形式同時傳入名稱和回調函數。因而 BackboneJS 中使用了eventsApi 進行統一的處理。git
Javascript 裏面寫[]其實是 new Array,所以很容易無心中產生不少使用很臨時的列表對象,例如一些臨時列表,做爲參數使用 apply 傳遞給函數。對於一個列表來講,最快的清空方法就是修改他的length,以下github
var arr = [1,2,3,4]; arr.length = 0; console.log(arr);
以後 arrObj 內容便會被釋放。這樣的對象能夠屢次使用,可是非臨時的變量必定不能使用。緣由以下:app
var arr = [1,2,3,4]; var new_list = arr; arr.length = 0; console.log(new_list[0]);
相同的 Object 也能夠運用相似的方法來重複使用。這些都是爲了儘可能減小對象的新建,頁面一直開着什麼狀況都有可能發生,其餘對象也是如此,字符串、函數、正則對象。框架
完成事件以後就須要去監聽url的變化而且解析,以及一些相似於後臺的url處理方法。(更新待續)函數