從開始接觸JS這東西有一年時間了,心頭總是有一些說不出來的苦悶。在論壇裡也常常有人這麼說。那麼苦在何處呢?總是感覺學的不深入,一些簡單的東西可以做但也是不能得心應手。能不能把這種苦再說的具體點兒呢?都說了是“說不出來的苦悶”怎麼具體呀?
何為難言之隱?說不出來,不能具體,不能把問題落到實處就不能得到解決的辦法。這就是難言之隱!我認為這也就是初學者的“困境”。之所以要用“我認為”正好迎合了本文標題中的“心得”二字。如果能對大家有協助我非常高興。
下面言歸正傳,我經過回想和思考總結出下面幾條初學者的“難言之隱”大家看看有沒有說到我們的心坎兒上,呵呵。
一、用系統的知識將問題具體化
我們在學習時經常會發現可以用不同的方法來實現同一個問題。例如,要為元素繫結一個點擊事件可以在HTML元素上用<a href="#" onClick="f1()"></a>,我們起初會認為這就是綁定事件的方法。
當我們第二次又看到可以將一個函數傳遞給一個事件來綁定:a.onclick=f1;這時我們又會想原來綁定事件不只有一種方法。
當我們第三次又看到用addachEvent("onclick",f1)這種方法綁定事件的時候,你一定會想綁定事件的方法可能不只這三種。而且做一件事沒理由要三種相同的方法,他們之間一定有不同之處?
那麼他們有什麼不同之處呢?到底綁定事件有多少種方法呢?當你發現一種方法在IE中不相容的時候你還會問這到底是為什麼呢?是我的語法錯誤了嗎?還是怎麼回事。一個又一個的問題結束之後你只好問自己:“天呀!我什麼時候才能學好JavaScript呢?!“。
可能這樣下去你很難學好JS。其實還要告訴你,你離學好他並不遠了,只是你不知道怎麼走。原因在哪裡?原因就是沒有系統的知識,原因就是沒有讀過《JavaScript權威指南》,他會告訴你綁定事件有四種方法,並且有兩種是基本方法,所有瀏覽器都支援他,另外還有兩種進階方法,一種是W3C標準方法,一種是IE標準方法,所以你知道為什麼IE不相容其中的一種進階方法了,對嗎?
現在事情具體化了,綁定一個事件的時候只需考慮這四種方法,你也不會再有那麼多的疑惑了。你也會覺得自己弄懂事件了,下一步你應該去弄懂其它問題了,你還會覺得自己在JS方面終於有進展了,當然你還會感覺到走出一個困境了。
二、必需瞭解JavaScript的曆史
你瞭解JS的曆史嗎?我當然瞭解,他原本不叫JavaScript,他最早不是實現在IE中的。對,說的很好,可這不是最重要的,知道這個也不會成為高手,你必須瞭解的更詳細,而且主要是瞭解功能進化方面的曆史。
就像上面,為什麼綁定事件會有那多的方法?為什麼獲得一個元素會有那麼多的方法?倒底是document.links[]正規一點?還是getElementsByTagName('a')正規一點?哪一個相容性更好?還有多少這樣的方法?
要知道一個問題就夠頭痛了,十個問題你就無從下手,一百個問題你就會懷疑自己。一千個問題最後又回到那個問題“天呀!我什麼時候才能學好JavaScript“?呵呵,事情往往就是這樣。解決的方法就是具體化他,去弄懂到底有幾種方法,為什麼又有這些方法。這些問題一定會有答案,因為JS不是外星人留下的東西,是人創造出來的,而那個人的思維也是有限的,不是嗎?
當你知道document.links[]是遺留的document方法,而且這種遺留方法一共有5個。分別是anchors[],applets[],forms[],images[],links[]的時候有些問題就消失了,當你還知道DOM標準保留了他們,你還知道所有瀏覽器都支援他們,你還知道他們就是所謂的“0級DOM”你又會走出一個“困境”。
三、JS有縱橫交錯的知識結構
JS的知識結構是橫向和縱向交錯的,這加大了理解他的難度,對這一點必需有一個清晰的認識。下面解釋一下“縱橫交錯”。
一般的知識都有橫向性。比如從大的方面JS分為核心部分和用戶端部分。這是橫向。核心部分又分為詞法結構,資料類型和值,變數,運算式和運算子,語句,對象和數組,函數,類,模組和名字空間,Regex。這也是橫向。
用戶端部分可以分為BOM,DOM,事件,樣式,表單等,這些也是橫向的知識結構。
一門技術很少用時間作為結構,但因為瀏覽器的發展是動態,不同時期的瀏覽器對JS有不同程度的實現,而在不同時間針對當時瀏覽器所編寫的網頁不能因為技術的發展就不去考慮他,而且讓所有的網站都隨著技術的發展而重新編寫是不可能的,所以JS即要發展升級,也要保留向前的支援。所以就算有了更好的方法也必需保留之前的方法,就有了好多遺留的JS屬性和方法,比如“0級DOM”在新的W3CDOM中得到了保留,從某種程度來講他就是縱向的。
當對知識結構有了清楚的認識,會有一個好處就是當我要解決一個問題的時候我就能知道我要用的是哪一塊的知識。比如要得到一個元素在文檔中的位置就會知道用的是DOM中元素的屬性,要得到滑鼠指標的位置就要用事件對象的屬性。要獲得一個元素的引用可以用遺留的DOM也可以用W3C標準的DOM方法。這是件好事。
其實上面問題的核心就是系統化和具體化,這是我在學習過程中覺得很重要的一點。這一點確實為我解決了不少疑惑。
走出初學困境,我們需要系統的知識和具體化的思想。謝謝你能花時間讀這篇文章希望能對你有協助。如果想討論更多的問題,歡迎加我的QQ:303551651。