JavaScript 框架分類

注:本文摘自司徒正美編著的《JavaScript框架設計》一書。前端

若是是從內部架構與理念劃分,目前JavaScript框架能夠劃分爲5類編程

第1種

出現的是以命名空間爲導向的類庫或框架,如建立一個數組用new Array(),生成一個對象用new Object(),徹底的Java風格,所以咱們就能夠以某一對象爲根,不斷爲它添加對象屬性或二級對象屬性來組織代碼,金字塔般地壘疊起來。表明做如早期的YUIEXT數組

第2種

出現的是以類工廠爲導向的框架,如著名的Prototype,還有mootoolsBase2Ten。它們基本上除了最基本的命名空間,其餘模塊都是一個由類工廠衍生出來的類對象。尤爲是mootools 1.3,把全部類型都封裝成Type類型。瀏覽器

第3種

就是以jQuery爲表明的以選擇器爲導向的框架,整個框架或庫主體是一個特殊類數組對象,方便集化操做——由於選擇器一般是一會兒選擇到N個元素節點,因而便一併處理了。jQuery包含了幾樣了不得的東西:「無new實例化」技術,$(expr)就是返回一個實例,不須要顯式地new出來;get first set all訪問規則:數據緩存系統。這樣就能夠複製節點的事件了。此外,IIFE(Immediately-Invoked Function Expression)也被髮掘出來。緩存

第4種

就是以加載器串聯起來的框架,它們都有複數個JavaScript文件,每一個JavaScript文件都以固定規則編寫。其中最著名的莫過於AMD模塊化是JavaScript走向工業化的標誌。《Unix編程藝術》列舉的衆多「金科玉律」的第一條就是模塊,裏面有言——「要編寫複雜軟件又不至於一敗塗地的惟一方法,就是用定義清晰的接口把若干簡單模塊組合起來,如此一來,多數問題只會出如今局部,那麼還有但願對局部進行改進或優化,而又不至於牽動全身」。許多企業內部框架都基本採起這種架構,如DojoYUIkissyqwrapmass等。安全

第5種

就是具備明確分層架構的MV*框架。首先是JavaScript MVC(如今叫CanJS)、backbonejsspinejs,而後更符合前端實際的MVVM框架,如knockoutemberangularavalonwinjs。在MVVM框架中,原有DOM操做被聲明式綁定取代了,由框架自行處理,用戶只需專一於業務代碼。架構


下面是有關框架特徵的結論。框架

  • 對基本數據類型的操做是基礎,如jQuery就提供了trimcamelCaseeachmap等方法,對Prototype.js等侵入式框架則是在原型上添加camelize等方法。dom

  • 類型的斷定必不可少,常見形式是isXXX系列。異步

  • 選擇器、domReadyAjax是現代框架的標配。

  • DOM操做是重中之重,節點的遍歷、樣式的操做、屬性操做也屬於它的範疇,是否細分就看框架的規模了。

  • brower sniff已過期,feature detect正被應用。不過特性偵測仍是有侷限性,若是針對於某個瀏覽器版本的渲染Bug、安全策略或某些Bug的修正,仍是要用到瀏覽器嗅探。但它應該獨立成一個模塊或插件,移除框架的核心。

  • 如今主流的事件系統都支持事件代理。

  • 數據的緩存與處理,目前瀏覽器也提供data-*屬性進行這方面的工做,但不太好用,須要框架的進一步封裝。

  • 動畫引擎,除非你的框架像Prototype.js那樣擁有像script.aculo.us這樣頂級的動畫框架作後盾,最好也加上。

  • 插件的易開發和擴展性。

  • 提供諸如Deferred這樣處理異步的解決方案。

  • 即便不專門提供一個類工廠,也應該存在一個名爲extendmixin的方法對對象進行擴展。jQuery雖然沒有類工廠,但在jQuery UI中也不得不增長一個,可見其重要性。

  • 自從jQuery出來一個名爲noConflict的方法,新興的框架都帶此方法,以求狹縫中生存。

  • 許多框架很是重視Cookie操做。

相關文章
相關標籤/搜索