其實本文有點太標題黨了,哈哈,見諒。說「聲討」,就是說說我作為乙個《jquery技術內幕》乙個忠實讀者,讀本書的一些想法和建議。
2023年2月20日,我收到了《jquery技術內幕》,密密麻麻600多頁。到今天4月9日,我已經看了400多頁(除卻sizzle的一部分沒看,因為那塊實在是看不懂,就先略過)。
我買了書,當時花了大約80元,而且認認真真的看了一大半,後面的部分我還會繼續看下去。也算是乙個忠實的讀者。
學習新知識,總是乙個痛苦的過程,期間也是痛並快樂著。總結痛苦的原因,一方面解讀jquery原始碼確實是乙個龐大的工程,另一方面,也覺得作者在寫書的時候漏掉了許多。
書看了一半多,總是想著寫點什麼。想來想去,印象最深的,是覺得作者沒有給讀者乙個「台階」,而是直接拔高到了原始碼的層面,一行一行的解讀、注釋。詳細解讀原始碼並沒有什麼不好,但是在解讀每行的原始碼之前,應該想說點什麼,把讀者帶進去。
下面我說幾個例子:
本書一上來就是構建jquery物件,列出了n中構建jquery物件的方式,有dom元素、字串、函式等等。但是讀者看了好大一部分篇幅之後,都不知道這些構建的物件,到底是什麼?這些**的最終結果是什麼?到底為誰服務?以及對jquery物件進行各種操作的時候,由於不明白它的結構而產生迷惑。
jquery('div')返回的,其實是乙個物件,加入頁面中有3個div元素,那麼這個物件就會建立「0」、「1」、「2」這三個屬性,分別指向這三個dom物件,length屬性記錄個數。這樣就不會讓我們誤以為jquery('div')是乙個陣列。
我當時問過許多人,jquery('div')是個什麼物件,他們都誤以為是乙個陣列,後來我跟他們說jquery('div')是乙個object,不是陣列。
(題外話:jquery('div')既然是object,那麼json.stringify(jquery('div'))會出錯,為什麼?因為jquery('div')裡面的dom元素存在著迴圈引用。)
記得當時看這一段的時候,我都懵了,從來沒接觸過「修正物件」這個概念,滿篇提到的get,set到底是什麼東西?
現在回頭再看,這些問題確實迎刃而解,但是當時確實不知道,於是就湊合著往前看,終於看到最後才算明白了,修正物件就是為了解決瀏覽器相容性,分離除了的處理瀏覽器「個性」需求的方法。
一般情況下的html/dom屬性操作,可能通過簡單的賦值或者設定就可以完成,但是有一些是需要照顧瀏覽器個性的,例如瀏覽器不支援getattribute()該怎麼辦,更多例子可參見jquery.support。jquery把這些特殊情況,分離出來,集中到乙個叫做「修正物件」的物件中,通過設定set和get來操作。因此,在獲取乙個html/dom屬性時,jquery會先檢查是否符合修正物件裡的情況,如果符合就呼叫get來返回值,如果不符合,就用最基本的操作返回值。
如果本書在該章節前面,加這樣一段解釋,以例子或者流程圖的形式展示更好,先把修正物件、get、set、的意義大體說一遍,讓讀者心裡有個譜,我想讀起來會輕鬆許多。
正是我現在看的章節,現在才算稍微明白一點。書中之前介紹過,事件儲存在jquery.cache中,不是直接用div1.onclick=function()的方式。但是寫到事件這一章節,沒有再深入介紹,即直接上來**解釋了。看它**中各種取值賦值,看的很難受,不知道從**取出,也不知道賦值到**去。
我覺得我現在像是個警察再查詢乙個案件的線索一樣,探尋著**中的蛛絲馬跡,再加上自己看一些部落格,才算稍微明白點事件的儲存結構,待完全明白估計得把這一章看完,然後再重新梳理一遍才行。
elemdata = $.data(div1); //說了這麼多,我想大家也應該明白我的意思了。div1對應的快取
handle = elemdata.handle; //
主監聽函式(統一觸發、執行其他函式)
events = elemdata.events; //
elemdata.events
handlers = events["click"]; //
click 對應的監聽物件陣列
handlers.push(handleobj); //
監聽物件陣列中儲存了若干個監聽物件
//handleobj又包含了事件型別、觸發函式等等各類資訊
《技術內幕》是一本很不錯的書,我也很佩服作者的功力,自己看著人家的書,理解都那麼費勁,何況作者寫書呢。
如果《技術內幕》能夠出第二版,希望作者能採納我的建議,多加一些解釋性的東西,多加一些「台階」。
跌跌撞撞的看完了《jquery技術內幕》
今年2月20日買的書,今天是5月26,三個月來,除了週末休息一天,如果沒有特殊情況,我都會每晚花兩個小時看這本書,以及查各種與jquery原始碼相關的資料。今天總算是跌跌撞撞的看完了,有點小激動,也有點小失望 雖然看完了,但是用兩個字概括看完的感受就是 糊塗 其實我也知道,想看懂一本書,看一遍不行。...
了解凹凸對映Bump Map技術的內幕
凹凸對映和紋理對映非常相似。然而,紋理對映是把顏色加到多邊形上,而凹凸對映是把粗糙資訊加到多邊形上。這在多邊形的視覺上會產生很吸引人的效果。我們只需要新增一點資訊到本來需要使用大量多邊形的物體上。需要注意的是這個物體是平的,但是它看起來卻是粗糙不平的。讓我們來看看左邊的那個立方體。如果你很近地觀察它...
Docker技術內幕2 Cgroup的介面和使用
cgroup是 linux 核心提供的乙個特性,用於限制和隔離一組程序對系統資源的使用。cgroup的原生介面通過cgroupfs提供,是一種虛擬檔案系統。預設被掛載到 sys fs cgroup目錄下。下面我們利用cgroup特性來限制cpu的使用。首先我們寫乙個消耗cpu的指令碼,如下 bin ...