注:本文摘自司徒正美編著的《JavaScript框架設計》一書。前端
若是是從內部架構與理念劃分,目前JavaScript框架能夠劃分爲5類。編程
出現的是以命名空間爲導向的類庫或框架,如建立一個數組用new Array()
,生成一個對象用new Object()
,徹底的Java風格,所以咱們就能夠以某一對象爲根,不斷爲它添加對象屬性或二級對象屬性來組織代碼,金字塔般地壘疊起來。表明做如早期的YUI
與EXT
。數組
出現的是以類工廠爲導向的框架,如著名的Prototype
,還有mootools
、Base2
、Ten
。它們基本上除了最基本的命名空間,其餘模塊都是一個由類工廠衍生出來的類對象。尤爲是mootools 1.3
,把全部類型都封裝成Type類型。瀏覽器
就是以jQuery
爲表明的以選擇器爲導向的框架,整個框架或庫主體是一個特殊類數組對象,方便集化操做——由於選擇器一般是一會兒選擇到N個元素節點,因而便一併處理了。jQuery
包含了幾樣了不得的東西:「無new
實例化」技術,$(expr)
就是返回一個實例,不須要顯式地new
出來;get first set all訪問規則:數據緩存系統。這樣就能夠複製節點的事件了。此外,IIFE(Immediately-Invoked Function Expression)也被髮掘出來。緩存
就是以加載器串聯起來的框架,它們都有複數個JavaScript
文件,每一個JavaScript文件都以固定規則編寫。其中最著名的莫過於AMD
。模塊化是JavaScript走向工業化的標誌。《Unix編程藝術》列舉的衆多「金科玉律」的第一條就是模塊,裏面有言——「要編寫複雜軟件又不至於一敗塗地的惟一方法,就是用定義清晰的接口把若干簡單模塊組合起來,如此一來,多數問題只會出如今局部,那麼還有但願對局部進行改進或優化,而又不至於牽動全身」。許多企業內部框架都基本採起這種架構,如Dojo
、YUI
、kissy
、qwrap
和mass
等。安全
就是具備明確分層架構的MV*
框架。首先是JavaScript MVC
(如今叫CanJS
)、backbonejs
、spinejs
,而後更符合前端實際的MVVM
框架,如knockout
、ember
、angular
、avalon
、winjs
。在MVVM
框架中,原有DOM操做被聲明式綁定取代了,由框架自行處理,用戶只需專一於業務代碼。架構
下面是有關框架特徵的結論。框架
對基本數據類型的操做是基礎,如jQuery就提供了trim
、camelCase
、each
、map
等方法,對Prototype.js
等侵入式框架則是在原型上添加camelize
等方法。dom
類型的斷定必不可少,常見形式是isXXX
系列。異步
選擇器、domReady
、Ajax
是現代框架的標配。
DOM
操做是重中之重,節點的遍歷、樣式的操做、屬性操做也屬於它的範疇,是否細分就看框架的規模了。
brower sniff
已過期,feature detect
正被應用。不過特性偵測仍是有侷限性,若是針對於某個瀏覽器版本的渲染Bug、安全策略或某些Bug的修正,仍是要用到瀏覽器嗅探。但它應該獨立成一個模塊或插件,移除框架的核心。
如今主流的事件系統都支持事件代理。
數據的緩存與處理,目前瀏覽器也提供data-*
屬性進行這方面的工做,但不太好用,須要框架的進一步封裝。
動畫引擎,除非你的框架像Prototype.js
那樣擁有像script.aculo.us
這樣頂級的動畫框架作後盾,最好也加上。
插件的易開發和擴展性。
提供諸如Deferred
這樣處理異步的解決方案。
即便不專門提供一個類工廠,也應該存在一個名爲extend
或mixin
的方法對對象進行擴展。jQuery
雖然沒有類工廠,但在jQuery UI
中也不得不增長一個,可見其重要性。
自從jQuery
出來一個名爲noConflict
的方法,新興的框架都帶此方法,以求狹縫中生存。
許多框架很是重視Cookie
操做。