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