歷時兩年多,個人書終於付梓出版了。應各方面的要求,寫軟文一篇,隆重介紹一下此書對各位程序員的錢途有什麼幫助及閱讀順序等疑問。做爲國內第一本講述前端框架構的書,它裏面充斥着許多你們前所未聞的知識,這些知識有50%只見於github的issue,講述各類隱祕的瀏覽器兼容性問題及各類神奇的修復方案,或者是某些危險但美麗的黑魔法,另外50%我深夜夢遊般在外國某些大牛(不侷限於英語,有日語,俄語,韓語等,不一樣的語言的人,受制了他們的語法結構,他們的思考迴路是與咱們不一樣的,給出的答案有時真的是拍案叫絕)的博客或網站瞥見的神奇東東。在我經過編寫dom Framework, mass Framework這兩大框架(dom Framework是老式的金字塔式的基於類的大框架, mass Framework是擁有AMD加載器的開放式框架,再後來的avalon,是鬼怪式的分層構架的MVVM框架,黑魔法滿滿的),創建完整的知識樹後,開始狂熱如征服六國後的秦王,熱衷於收集各類奇珍異寶於個人博客——大家看的部分,只是我未公開的十分之一而已,本書將額外開恩公佈另外的十分之二。javascript
其實這世界很奇妙的,當你水平上去後,就算你不想繼續,這世界也推進着你前進。就像jQuery1.3經過Sizzle大獲成功後,成爲世界的明星,就算John Resig想撒手,但這麼多pull request,它也只能從更好變成更加好!三年前,當我寫了三百多篇的博文,出版社已經找上門來了。在那半年內,總共有三四家來找我,讓我看到前端的但願。因而個人重心由ruby慢慢轉向javascript。待到我加入盛大創新院後,我已經確保我能hold住《javascript框架設計》這個大題目,因而簽約寫書。不過,在最初我提交給出版社的目錄裏,我有着更爲恢宏的目標,包含拖放組件, 路由系統, 及各式UI組件,但最後因爲篇幅的問題,只好說聲抱歉了。html
野望老是被現實所掣肘,亞歷山大想證實世界,可他的HP也是這麼短,經不起長途跋涉。實體書與博客是不一樣的,它必需要造成一個體系,文體也有要求,不能太口語化,什麼喜樂哀痛必須收起來,板着臉正正經經地對你們宣講。錯別字也要收殮一下,雖然我找了許多高手審稿了。惋惜個個都開寫輪眼,自動過濾掉錯別字,最終仍是讓出版社的張濤大大幫忙處理了大部分錯別字與病句,太專業的東西他也無能爲力,希望不影響閱讀。幸虧各位大神貢獻了很多冷癖有用的知識點,讓本書充實了很多,所以才一改再改,三番四次,致使兩年多才交稿。在盛大建立院時,不斷有人(同事或羣友)問個人書何時出來,人家半年就搞出一本了。我今天終於不爲這問題煩惱了。 前端
在繼續這篇軟文時,我腦海真的是閃現許多詞彙,什麼大教堂與集市,造輪子與DRY,公司利益與我的成長……一個個來吧html5
大教堂與集市說的是如何構建一個軟件工程,是大教堂式的專制主義仍是開放式的以衆包方式讓你們貢獻源碼。前者,緩和一點地說,是英雄主義,jQuery之於John Resig, Node.JS之於Ryan Dahl,他們單人匹馬開創了一個新天地。後者,最傑出的表明是Linux。但在這個互相浸透學習的世界,絕對的東西是不存在的。jQuery與Node.JS如今也是在衆多的項獻者的努力一下前進,原做者向新目的地進發了。在國內,你懂的,每一個人都自命不凡,一開始只能是你一個踽踽獨行。只有你真正成爲明燈式的人物後,纔有人追隨。java
造輪子與DRY這問題也新浪微博上也吵過許屢次了。有個軟件設計原則叫DRY,防止組員們隨意克隆代碼,或在不知情的狀況下重複發明類似的功能模塊。公司出於利益的考慮,也不肯給時間組員本身去造輪子,上網找一個jQuery插件了事。所以,小中公司的頁面很是恐怖,允斥着大量第三方插件,而相對而言,大阿狸能用的基本本身作,這正是游擊隊與正規軍的區別。從國內看,最重視JS的公司也偏偏是大阿狸,他們擁有國內最龐大優秀的前端團隊(700多人),小公司仍是一個前端對20個後端的節奏。招這麼多高手幹嗎呢?造輪子!固然,這不是一個輪子所表明的,這涉及一整套的工具鏈,目的是實現前端自動化集成佈署。寫框架與UI組件保是其中一個不多環節,這也是通常人能理解的東西,更多高大上的東西,大公司也不會公開出來。但你起碼擁有創造UI組件這樣的能力,才能讓你碰更底層的工具。jquery
公司利益與我的成長,這個更不用說。只有目光短淺的公司,纔會用雜牌的組件寫碼。大公司早已爲你準備一整好東西了。而你的任務就是成長到具備寫UI組件的地步,進入架構師,爲公司的將來挑戰作好更多準備(工具)。HTML5對於通常人而言,好像是很是遙遠的事,但大公司早已有一幫人用它作出許多好東西,爲公司產品的用戶體驗添磚加瓦。爲了積聚這實力,你必須本身暗暗發力,偷偷本身寫一套東西。以前人家寫過的彈出層,富文本編輯器,語法高亮插件……你一套也不能少,這樣你才能接觸到以前碰不到的原生API與知識點。如彈出層有關垂直居中的CSS知識點,select穿透問題,富文本編輯器用到的iframe知識點,Range與Selection對象的知識點,語法高亮則是你正則的大檢驗!若是寫業務代碼,你寫十年,水平仍是那樣。所以有句話說——「用一年的經驗混十年」git
最近在微博看到一件可怕的事:程序員
【我所瞭解的一個精神失常的程序員】http://t.cn/8sinEOr 不久前咱們公司有個程序員精神失常。他走進經理辦公室開始大喊大叫,說着一些奇怪的事情。若是我不是像瞭解本身一下了解他,就會覺得他磕了藥。可是事實上他簡直就是精神失常了!github
他是我在編程行業見過的最勤奮員工。他常常在下班後加班,週末的時候,當管理人員須要人手去處理緊急工做時,他老是隨叫隨到。在這個階段公司並不賺 錢,老闆須要儘量快的完成項目,因此任何被客戶急催的軟件開發都會自動分配給他。他很樂意地全心投入把工做作完正是老闆喜歡的地方。編程
"我能力強,我效率高,我應該是公司的關鍵人物",其實那是錯的,不可替代性纔是最重要的。若是靠「賣力」增長不可替代性,做用是微乎其微的,仍是得靠「高門檻」。我認識的工程師裏,越是技術好的工程師越會意識到這個問題,而後去作一些"深度"的發展,這也算是工程師的自我保護吧。說什麼作IT沒前途,30歲要轉行,這只是無能者的藉口。
古人說——「人無遠慮,必有近憂」。你平時有這麼多空閒時間,爲什麼不努力提高一下本身的水平呢。不去認真閱讀一下大師們的框架,不本身寫一個框架。記得當初我在博客宣傳個人框架,被某個嫉妒的人罵個狗血噴頭,兩年過去,他消聲匿跡,而我,從一個公司的核心前端變爲另外一個公司的核心前端,如今是去哪兒網的前端架構師。所以要相信本身!不要怕這怕那,有努力就有回報!
再回來講個人書,前端的知識點是很是龐雜的。但知識只有串起來,造成知識樹纔是你本身的。如今市面上的書,基本上抄來抄去,仍是依照老舊的方法教人,一開始老是歷史回顧,而後是各類數據類型介紹,而後是語法(條件分支,循環分支)什麼的,最後再來幾個「真實案例」。這對於90%半路出家的前端來講,未免太悶了。並且前端不僅僅是javascript, javascript只是水泥, 或者說儲如化學分子這東西,而咱們工做是爲了構建一整座大廈!只有肉眼看到的物理級別的東西纔是主角。它們就是本書的重點, DOM與BOM。 javascript經過特性偵測或傳參等,進入不一樣的分支,來解決前端臭名昭著的兼容性問題。本書介紹了大量這樣的黑魔法,如何知道當前瀏覽器是支持這個事件呢? 爲什麼在這裏要劫持this呢? 怎麼樣讓選擇器引擎跑得更快。因而這一個個疑問,便化解成本書所介紹的知識點,什麼AMD加載器, 選擇器引擎,批量生成一堆元素節點……
全部前端框架面對的問題都是同樣,不一樣的是解決手段的高下程度。因而Prototype死了,jQuery火了。 angular爆發了, jQuery沉寂了!本書的章節就是按照編寫一個多文件框架的順序來寫。最開始確定是種子模塊,定義框架的名字與版本號,與一些最核心的方法,還有加載器。而後經過加載器,添加一些經常使用的工具模塊,對javascript語言進行擴張與修復。以後是數據緩存什麼的,再以後是主菜,各類DOM問題, 節點啊, 樣式啊, 事件啊, 動畫啊……最後是MVVM,當前最強大的前端解決方案。經過引入雙向綁定與分層架構,徹底脫離DOM進行前端開發。
你或者有過激情,你或者有過夢想,但當你的KPI考覈點是PM那些荒唐的改來改去的功能點,多熾熱的火焰也會被澆滅。所以你必需要搞出一點東西出來,努力爬上去。是廢命於加班,每天寫業務,仍是專一於底層框架的研發,爲某個難題而苦惱,徹底在於你一念之差。「是金子總會發光的」,或「是石頭到哪都不會發光的」,也徹底在於你一念之差。本書將爲你提供了一個可能性及一大堆技能點,打開了一個美麗的新世界,提供了一個X年不遇的機會,準備了一個迅速上升的渠道。
可能有些人會嫌它貴,也有些人怕本身看不明白這麼「高大上」的東西。我說一個故事吧。
一個特別喜好昆蟲的人作了這樣一個實驗:他將跳蚤放進敞口的瓶子裏,它馬上便跳了出來。當把瓶子蓋上時,跳蚤仍是會竭力跳出瓶子,它不停地撞擊着瓶蓋的內側。一個多小時後,他還在那樣跳着。差很少三個小時後,它依然在跳,只是它再也不撞着瓶蓋了,此時它跳的高度離瓶蓋大約1釐米左右,並且每一次都是如此。這時,瓶蓋被拿掉了,可是跳蚤並無跳出瓶口,它依然保持着有瓶蓋時的高度,再也跳不出瓶口。
同理,若是你,總嫌這個貴那個貴,你又不努力改變現狀,過了一段時間,你就會習慣了,就會安於貧困了。就像瓶子的跳蚤那樣安於天命,永遠困死在瓶子裏。
怕本身理解不了這東西,這雖然是一個理智的考量,但只要是人就會遇到瓶頸,但問題是如何突破瓶頸。瓶蓋又不是老是蓋上的,有機遇你得抓住!
我也曾畢業找不到工做,潦倒到當了一年保安。但我相信「是金子總會發光的」,我終會一舉成名,我如今只是一隻受傷的野狼,我不會被命運所屈服馴化。所以跟我咆哮吧——
無名的生命之花 已慘遭摧殘踐踏 一度墜地的飛鳥 正焦急以待風起 一味埋頭祈禱 卻不會有任何改變 若想有所改變 就請起而奮戰吧 踏過屍體前行的咱們 嘲笑這進擊意志的豬玀啊 家畜般的安寧 那虛僞的繁榮 請賜予誓死之餓狼以自由! …… ——進擊的巨人OP《紅蓮の弓矢》
下面是書的目錄:
序章 第1節 框架與庫 第2節 javascript年代劃分 第3節 javascript框架分類 第4節 javascript框架的主要功能 第1章 種子模塊 第1節 命名空間 第2節 對象擴展 第3節 數組化 第4節 類型的斷定 第5節 domReady 第6節 無衝突處理 第2章 模塊加載系統 第1節 AMD規範 第2節 加載器所在路徑的探知 第3節 require方法 第4節 define方法 第3章 語言模塊 第1節 字符串的擴展與修復 第2節 數組的擴展與修復 第3節 數值的擴展與修復 第4節 函數的擴展與修復 第5節 日期的擴展與修復 第4章 瀏覽器嗅探與特徵偵測 第1節 斷定瀏覽器 第2節 事件的支持偵測 第3節 樣式的支持偵測 第4節 jQuery一些經常使用特徵的含義 第5章 類工廠 第1節 javascript對類的支撐 第2節 各類類工廠的實現 第2.1節 P.js 第2.2節 JS.Class 第2.3節 simple-inheritance 第2.4節 def.js 第3節 es5屬性描述符對OO庫的衝擊 第6章 選擇器引擎 第1節 瀏覽器內置的尋找元素的方法 第2節 getElementsBySelector 第3節 選擇器引擎涉及的知識點 第4節 選擇器引擎涉及的通用函數 第4.1節 isXML 第4.2節 contains 第4.3節 節點排序與去重 第4.4節 切割器 第4.5節 屬性選擇器對於空白字符的匹配策略 第4.6節 子元素過濾僞類的分解與匹配 第5節 Sizzle引擎 第7章 節點模塊 第1節 節點的建立 第2節 節點的插入 第3節 節點的複製 第4節 節點的移除 第5節 innerHTML, innerText與outerHTML的處理 第6節 一些奇葩的元素節點 第6.1節 iframe 第6.2節 object 第6.3節 video 第8章 數據緩存系統 第1節 jQuery的第1代緩存系統 第2節 jQuery的第2代緩存系統 第3節 mass Framework的第1代數據緩存系統 第4節 mass Framework的第2代數據緩存系統 第5節 mass Framework的第3代數據緩存系統 第9章 樣式模塊 第1節 主體結構 第2節 樣式名的修正 第3節 個別樣式的特殊處理 第3.1節 透明度 第3.2節 user-select 第3.3節 backgroundPosition 第3.4節 z-index 第3.5節 盒子模型 第3.6節 元素的尺寸 第3.7節 元素的顯示隱藏 第3.8節 元素的座標 第4節 元素的滾動條的座標 第10章 屬性模塊 第1節 如何區分固有屬性與自定義屬性 第2節 如何斷定瀏覽器是否區分固有屬性與自定義屬性 第3節 IE的屬性系統的三次演變 第4節 className的操做 第5節 Prototype.js的屬性系統 第6節 jQuery的屬性系統 第7節 mass Framework的屬性系統 第11章 事件系統 第1節 onXXX綁定方式的缺陷 第2節 attachEvent的缺陷 第3節 addEventListener的缺陷 第4節 Dean Edward 的addEvent.js源碼分析 第5節 jquery1.8.2的事件模塊概覽 第6節 jQuery.event.add的源碼解讀 第7節 jQuery.event.remove的源碼解讀 第8節 jQuery.event.dispatch的源碼解讀 第9節 jQuery.event.trigger的源碼解讀 第10節 jQuery對事件對象的修復 第11節 滾輪事件的修復 第12節 mouseenter與mouseleave事件的修復 第13節 focusin與focusout事件的修復 第14節 舊式IE下submit的事件代理的實現 第15節 oninput事件的兼容性處理 第12章 異步處理 第1節 setTimeout與setInterval 第2節 Mochikit Deferred 第3節 JSDeferred 第4節 jQuery Deferred 第5節 javascript異步處理的前景 第13章 數據交互模塊 第1節 AJAX概覽 第2節 優雅地取得XMLHttpRequest 對象 第3節 XMLHttpRequest 對象的事件綁定與狀態維護 第4節 發送請求與數據 第5節 接收數據 第6節 上傳文件 第7節 一個完整的AJAX實現 第14章 動畫引擎 第1節 動畫的原理 第2節 緩動公式 第3節 API的設計 第4節 mass Framework基於JS的動畫引擎 第5節 requestAnimationFrame 第6節 CSS3 transition 第7節 CSS3 animation 第8節 mass Framework基於CSS 的動畫引擎 第15章 插件化 第1節 jQuery的插件的通常寫法 第2節 jQuery ui對內部類的操做 第3節 jQuery easyui的智能加載與個別化制定 第4節 更直接地操做UI實例 第16 章 MVVM 第1節 當前主流MVVM框架介紹 第2節 屬性變化的監聽 第3節 ViewModel 第4節 綁定 第5節 監控數組與子模板 結語
閱讀順序,原則上沒什麼要求,但第2章、第6章、第14章、第16章是很是有挑戰性的,你們能夠延後閱讀。若是基礎不太好,能夠先從第3章看起,跳過我說的那些比較難的章節。本書已經很把寫一個前端框架所須要掌握的知識點與細節所有挖掘出來了,剩下的就是靠大家的造化。總之,儘快造成本身的知識樹,才能獨檔一面。
購賣地址:京城的人推薦在京東買,送貨速度快http://item.jd.com/11436424.html,想追求性價比,也能夠在一淘中挑選。
亞馬遜購買連接
錯別字或疑問能夠提交到這裏 https://github.com/RubyLouvre/jsbook/issues
你們還能夠加個人QQ四羣(208841633),一塊兒學習。