好久沒有更新博客了,以前因爲一些事情要忙,沒有把本身平時接觸到的、學到的知識分享出來,今天先來扯一下JavaScript框架是怎麼回事以及如何構建本身的JavaScript框架?編程
先來簡單說說JavaScript究竟是什麼?JavaScript是一種基於(面向)對象和事件驅動並具備相對安全性的客戶端的腳本語言,同時也是一種普遍用於客戶端Web開發中的腳本語言。它最初由網景公司(Netscape)的Brendan Eich設計,是一種動態、弱類型、基於原型的語言,內置支持類。JavaScript具備面向對象、做用域、閉包、上下文等相關特性。JavaScript語言優秀的想法表如今函數、弱類型、動態對象和富有表現力的對象字面量表示法幾個方面,而其比較糟糕的想法是基於全局變量的編程模型。正由於JavaScript具備這些特色,其在客戶端的使用日益頻繁,做用很是巨大,JavaScript的Ajax技術甚至顛覆了整個互聯網的開發模式。瀏覽器
JavaScript 自己就是一種功能強大的語言,開發者能夠不須要額外的框架就可建立富互聯網應用程序(RIA)。然而使用 JavaScript 並非件容易的事,主要是因爲支持多個 Web 瀏覽器產生的複雜性。與 HTML 和 CSS同樣,不一樣的瀏覽器有不一樣的 JavaScript 實現。讓 JavaScript 代碼實現跨瀏覽器兼容簡直是個噩夢。因而出現了一種可以簡化工做的方式,開發JavaScript框架或庫,JavaScript框架或庫是一組可以輕鬆生成跨瀏覽器兼容的JavaScript代碼的工具盒函數,通過測試好的框架或庫能夠後期重複使用而沒必要擔憂出現各類問題,大大地簡化了開發工做。安全
如今網絡上已經流行了許多類別的JavaScript框架或庫,比較著名的JavaScript框架如Yahoo! UI Library (YUI) (一個開放源代碼的 JavaScript 函數庫,爲了能創建一個高互動的網頁,它採用了AJAX, DHTML 和 DOM 等程式碼技術。它也包含了許多 CSS 資源,使用受權爲 BSD許可證)、JQuery(誕生於2006年,一直以來以開源供形式供開發者使用,其核心思想是「Write Less,Do More」)、Dojo(一個強大的面向對象JavaScript框架,主要由三大模塊組成:Core、Dijit、DojoX。Core提供 Ajax,events,packaging,CSS-based querying,animations,JSON等相關操做API)、Sencha Ext JS4(Sencha 是由 ExtJS、jQTouch 以及 Raphael 三個項目合併而成的一個新項目,是繪畫、圖表引擎,使用DOM-accessible JavaScript圖表和矢量圖)、Prototype(一個由Sam Stephenson寫的JavaScript包,這個構思奇妙編寫良好的一段兼容標準的一段代碼將承擔創造胖客戶端, 高交互性WEB應用程序的重擔,輕鬆加入Web 2.0特性)、MooTools(一個簡潔,模塊化,面向對象的JavaScript框架,它可以幫助你更快,更簡單地編寫可擴展和兼容性強的JavaScript代 碼,Mootools從Prototype.js中汲取了許多有益的設計理念,語法也和其極其相似,但它提供的功能要比Prototype.js多,總體設計也比Prototype.js要相對完善,功能更強大,好比增長了動畫特效、拖放操做等)、Zepto(支持移動WebKit瀏覽器的JavaScript框架,具備與jQuery兼容的語法,2-5k的庫,經過不錯的API處理絕大多數的基本工做)……網絡
這些JavaScript框架或庫他們具備各自的特色,可是他們都有一個共同的問題,開發者事先並不知道本身須要哪些JavaScript功能,而這些框架具備許多功能性函數,從而形成了必定的影響,如將沒有用到的函數加載到頁面裏,增大了網絡帶寬的開銷。做爲一個開發者,若是隻會使用人家已經作好的東西來製造東西,我以爲永遠不會有多大的進步。雖然利用人家的框架或庫可以解決實際問題,可是若是有時候開發中遇到了框架裏的問題本身可能不知道如何去解決,也不知道怎麼樣去從新構造一個適合於本身站點的應用框架。閉包
那麼如何讓本身可以輕易開發出一個適合本身應用的框架呢?我以爲有兩點比較重要,首先熟悉JavaScript語言的基本語法以及相關特性,再者熟悉各個瀏覽器之間的差別性。爲了可以比較順利的進行框架開發,必須熟悉JavaScript的函數、閉包、命名空間、做用域、面向對象、函數式語言、動態性等知識點。大多數JavaScript框架都具備如下的有用特性,包括選擇器、DOM遍歷、DOM操做、使用函數、事件處理、Ajax。許多框架都包含了這些特性,可是有些過於複雜,平時在開發中不多使用,因而我決定用本身所學過的知識來搭建一個屬於本身的框架,這個框架須要具有平時本身開發中常常用的方法。如今初步我想實現如下方法,選擇器、CSS、事件處理、運動效果、Ajax。框架