利用空閑幾天把《JavaScript權(quán)威指南》安靜的讀了一篇。真是一本好書呀!呵呵,這句話見的太多了。好在什么地方呢?聽我慢慢道來。
從開始接觸JS這東西有一年時(shí)間了,心頭總是有一些說不出來的苦悶。在論壇里也常常有人這么說。那么苦在何處呢?總是感覺學(xué)的不深入,一些簡(jiǎn)單的東西可以做但也是不能得心應(yīng)手。能不能把這種苦再說的具體點(diǎn)兒呢?都說了是“說不出來的苦悶”怎么具體呀?
何為難言之隱?說不出來,不能具體,不能把問題落到實(shí)處就不能得到解決的辦法。這就是難言之隱!我認(rèn)為這也就是初學(xué)者的“困境”。之所以要用“我認(rèn)為”正好迎合了本文標(biāo)題中的“心得”二字。如果能對(duì)大家有幫助我非常高興。
下面言歸正傳,我經(jīng)過回想和思考總結(jié)出下面幾條初學(xué)者的“難言之隱”大家看看有沒有說到我們的心坎兒上,呵呵。
一、用系統(tǒng)的知識(shí)將問題具體化
我們?cè)趯W(xué)習(xí)時(shí)經(jīng)常會(huì)發(fā)現(xiàn)可以用不同的方法來實(shí)現(xiàn)同一個(gè)問題。例如,要為元素綁定一個(gè)點(diǎn)擊事件可以在HTML元素上用<a href="#" onClick="f1()"></a>,我們起初會(huì)認(rèn)為這就是綁定事件的方法。
當(dāng)我們第二次又看到可以將一個(gè)函數(shù)傳遞給一個(gè)事件來綁定:a.onclick=f1;這時(shí)我們又會(huì)想原來綁定事件不只有一種方法。
當(dāng)我們第三次又看到用addachEvent("onclick",f1)這種方法綁定事件的時(shí)候,你一定會(huì)想綁定事件的方法可能不只這三種。而且做一件事沒理由要三種相同的方法,他們之間一定有不同之處?
那么他們有什么不同之處呢?到底綁定事件有多少種方法呢?當(dāng)你發(fā)現(xiàn)一種方法在IE中不兼容的時(shí)候你還會(huì)問這到底是為什么呢?是我的語(yǔ)法錯(cuò)誤了嗎?還是怎么回事。一個(gè)又一個(gè)的問題結(jié)束之后你只好問自己:“天呀!我什么時(shí)候才能學(xué)好JavaScript呢?!“。
可能這樣下去你很難學(xué)好JS。其實(shí)還要告訴你,你離學(xué)好他并不遠(yuǎn)了,只是你不知道怎么走。原因在哪里?原因就是沒有系統(tǒng)的知識(shí),原因就是沒有讀過《JavaScript權(quán)威指南》,他會(huì)告訴你綁定事件有四種方法,并且有兩種是基本方法,所有瀏覽器都支持他,另外還有兩種高級(jí)方法,一種是W3C標(biāo)準(zhǔn)方法,一種是IE標(biāo)準(zhǔn)方法,所以你知道為什么IE不兼容其中的一種高級(jí)方法了,對(duì)嗎?
現(xiàn)在事情具體化了,綁定一個(gè)事件的時(shí)候只需考慮這四種方法,你也不會(huì)再有那么多的疑惑了。你也會(huì)覺得自己弄懂事件了,下一步你應(yīng)該去弄懂其它問題了,你還會(huì)覺得自己在JS方面終于有進(jìn)展了,當(dāng)然你還會(huì)感覺到走出一個(gè)困境了。
二、必需了解JavaScript的歷史
你了解JS的歷史嗎?我當(dāng)然了解,他原本不叫JavaScript,他最早不是實(shí)現(xiàn)在IE中的。對(duì),說的很好,可這不是最重要的,知道這個(gè)也不會(huì)成為高手,你必須了解的更詳細(xì),而且主要是了解功能進(jìn)化方面的歷史。
就像上面,為什么綁定事件會(huì)有那多的方法?為什么獲得一個(gè)元素會(huì)有那么多的方法?倒底是document.links[]正規(guī)一點(diǎn)?還是getElementsByTagName('a')正規(guī)一點(diǎn)?哪一個(gè)兼容性更好?還有多少這樣的方法?
要知道一個(gè)問題就夠頭痛了,十個(gè)問題你就無從下手,一百個(gè)問題你就會(huì)懷疑自己。一千個(gè)問題最后又回到那個(gè)問題“天呀!我什么時(shí)候才能學(xué)好JavaScript“?呵呵,事情往往就是這樣。解決的方法就是具體化他,去弄懂到底有幾種方法,為什么又有這些方法。這些問題一定會(huì)有答案,因?yàn)镴S不是外星人留下的東西,是人創(chuàng)造出來的,而那個(gè)人的思維也是有限的,不是嗎?
當(dāng)你知道document.links[]是遺留的document方法,而且這種遺留方法一共有5個(gè)。分別是anchors[],applets[],forms[],images[],links[]的時(shí)候有些問題就消失了,當(dāng)你還知道DOM標(biāo)準(zhǔn)保留了他們,你還知道所有瀏覽器都支持他們,你還知道他們就是所謂的“0級(jí)DOM”你又會(huì)走出一個(gè)“困境”。
三、JS有縱橫交錯(cuò)的知識(shí)結(jié)構(gòu)
JS的知識(shí)結(jié)構(gòu)是橫向和縱向交錯(cuò)的,這加大了理解他的難度,對(duì)這一點(diǎn)必需有一個(gè)清晰的認(rèn)識(shí)。下面解釋一下“縱橫交錯(cuò)”。
一般的知識(shí)都有橫向性。比如從大的方面JS分為核心部分和客戶端部分。這是橫向。核心部分又分為詞法結(jié)構(gòu),數(shù)據(jù)類型和值,變量,表達(dá)式和運(yùn)算符,語(yǔ)句,對(duì)象和數(shù)組,函數(shù),類,模塊和名字空間,正則表達(dá)式。這也是橫向。
客戶端部分可以分為BOM,DOM,事件,樣式,表單等,這些也是橫向的知識(shí)結(jié)構(gòu)。
一門技術(shù)很少用時(shí)間作為結(jié)構(gòu),但因?yàn)闉g覽器的發(fā)展是動(dòng)態(tài)的,不同時(shí)期的瀏覽器對(duì)JS有不同程度的實(shí)現(xiàn),而在不同時(shí)間針對(duì)當(dāng)時(shí)瀏覽器所編寫的網(wǎng)頁(yè)不能因?yàn)榧夹g(shù)的發(fā)展就不去考慮他,而且讓所有的網(wǎng)站都隨著技術(shù)的發(fā)展而重新編寫是不可能的,所以JS即要發(fā)展升級(jí),也要保留向前的支持。所以就算有了更好的方法也必需保留之前的方法,就有了好多遺留的JS屬性和方法,比如“0級(jí)DOM”在新的W3CDOM中得到了保留,從某種程度來講他就是縱向的。
當(dāng)對(duì)知識(shí)結(jié)構(gòu)有了清楚的認(rèn)識(shí),會(huì)有一個(gè)好處就是當(dāng)我要解決一個(gè)問題的時(shí)候我就能知道我要用的是哪一塊的知識(shí)。比如要得到一個(gè)元素在文檔中的位置就會(huì)知道用的是DOM中元素的屬性,要得到鼠標(biāo)指針的位置就要用事件對(duì)象的屬性。要獲得一個(gè)元素的引用可以用遺留的DOM也可以用W3C標(biāo)準(zhǔn)的DOM方法。這是件好事。
其實(shí)上面問題的核心就是系統(tǒng)化和具體化,這是我在學(xué)習(xí)過程中覺得很重要的一點(diǎn)。這一點(diǎn)確實(shí)為我解決了不少疑惑。
走出初學(xué)困境,我們需要系統(tǒng)的知識(shí)和具體化的思想。謝謝你能花時(shí)間讀這篇文章希望能對(duì)你有幫助。如果想討論更多的問題,歡迎加我的QQ:303551651。
本文鏈接:http://m.95time.cn/tech/web/2008/6349.asp
出處:藍(lán)色理想
責(zé)任編輯:bluehearts
◎進(jìn)入論壇網(wǎng)頁(yè)制作、WEB標(biāo)準(zhǔn)化版塊參加討論,我還想發(fā)表評(píng)論。
|