技多不壓身:學(xué)習(xí)JavaScript經(jīng)驗(yàn)分享
紫云飛 發(fā)表于:13年02月20日 00:30 [轉(zhuǎn)載] 51CTO
回顧我的編程生涯,有三種編程語(yǔ)言給我學(xué)習(xí)JavaScript打上了良好的基礎(chǔ)(之所以這么說(shuō),是因?yàn)镴avaScript的確有一些比較難學(xué)的地方):
Scheme: 在我進(jìn)入大學(xué)信息專業(yè)的第一學(xué)期,我通過(guò)經(jīng)典的“計(jì)算機(jī)程序的構(gòu)造和解釋”一書學(xué)習(xí)了Scheme語(yǔ)言.當(dāng)初,JavaScript從Scheme中學(xué)到了閉包.最近,受Racket(一種Scheme方言)的啟發(fā),ECMAScript 6中又增加了一種稱之為private symbol的對(duì)象類型來(lái)實(shí)現(xiàn)“私有性(privacy)” .
Self: 隨后,我還粗略的學(xué)習(xí)過(guò)基于原型的面向?qū)ο笳Z(yǔ)言.期間看過(guò)一篇很有見地的論文:“不使用類來(lái)組織程序”. 這篇論文通過(guò)描述一種稱之為Self的語(yǔ)言(另一種在JavaScript發(fā)明時(shí)期影響了它的語(yǔ)言)講到了下面這些知識(shí)點(diǎn):"基于類的語(yǔ)言中存在有兩種關(guān)系:誰(shuí)是誰(shuí)的實(shí)例(對(duì)象和類之間的關(guān)系)和誰(shuí)是誰(shuí)的子類(類和類之間的關(guān)系).基于原型的語(yǔ)言中只存在有一種關(guān)系:誰(shuí)是誰(shuí)的原型(對(duì)象和對(duì)象之間的關(guān)系).雖說(shuō)如此,但在這兩種不同的面向?qū)ο笳Z(yǔ)言中,該如何組織自己的程序,還是很類似的".
Java: 通過(guò)學(xué)習(xí)Java,有三點(diǎn)可以影響到你對(duì)JavaScript的學(xué)習(xí).首先是語(yǔ)法,因?yàn)樵诎l(fā)明JavaScript的時(shí)候,JavaScript之父收到的命令就是“它的語(yǔ)法必須看起來(lái)像Java.第二點(diǎn)是,它能幫助你學(xué)會(huì)面向?qū)ο蟮木幊?雖然有時(shí)候會(huì)覺的Java的語(yǔ)法有點(diǎn)死板.“Effective Java”(亞馬遜購(gòu)買鏈接)一書是一本很好的Java入門書籍.第三點(diǎn),你還能知道一個(gè)好的IDE(Eclipse等)應(yīng)該是什么樣的,在這一方面,JavaScript仍然需要努力向前趕.
除了我所說(shuō)的這三種語(yǔ)言,肯定還有一些其他的語(yǔ)言,能讓你把一些在這些語(yǔ)言中學(xué)到的原理稍加修改(或者完全一樣)就能應(yīng)用到JavaScript的學(xué)習(xí)中.
譯者注:很遺憾,我沒有學(xué)過(guò)Scheme和Self,和大部分人一樣,我也費(fèi)了不少勁才算搞明白JavaScript中的閉包和原型.不過(guò)我接觸過(guò)awk,Perl和Python,.這三門語(yǔ)言也對(duì)JavaScript產(chǎn)生了一定的影響.
awk的函數(shù)聲明寫法是這樣的:
- function add(a,b){
- return a+b
- }
你看見了,和JavaScript中函數(shù)聲明的寫法一模一樣,因?yàn)閒unction這個(gè)關(guān)鍵字就是來(lái)自awk的,證據(jù)是"Coders at Work"一書中Brendan Eich接受采訪時(shí)說(shuō)過(guò)的話:
One more positive influence, and this is kind of embarrassing, was awk. I mean, I was an old Unix hacker and Perl was out, but I was still using awk for various chores. And I could’ve called these first-class functions anything, but I called them “function” mainly because of awk. An eight-letter keyword—it’s kind of heavy, but there it is.
再來(lái)說(shuō)Perl,JavaScript中的正則表達(dá)式語(yǔ)法是從Perl來(lái)的.各種數(shù)組方法 push,pop,shift,unshift,splice,join,reverse,sort,都是來(lái)自于Perl中的同名函數(shù).我在 SpiderMonkey源碼中搜索過(guò)"Perl",結(jié)果如下:
這些注釋幾乎都是Brendan Eich親手寫的.如果你熟悉Perl,在開始學(xué)習(xí)JavaScript的時(shí)候就不會(huì)對(duì)這些來(lái)源于Perl的方法和特性感到陌生.
那Python呢?在發(fā)明JavaScript的時(shí)候,Python才剛剛起步 (1.2),目前的JavaScript貌似沒有從Python中學(xué)到些什么,不過(guò)未來(lái)的JavaScript會(huì),ECMAScript 6中的迭代器和生成器,yield表達(dá)式,數(shù)組(生成器)推導(dǎo)式,默認(rèn)參數(shù),剩余參數(shù),解構(gòu),模塊等等,都或多或少的學(xué)習(xí)了Python中的類似語(yǔ)法.如 果你沒接觸過(guò)Python,學(xué)習(xí)這些東西會(huì)花費(fèi)不少時(shí)間,相反,這些東西幾乎沒有什么學(xué)習(xí)成本.
有些人說(shuō):"學(xué)習(xí)編程語(yǔ)言要精通一門,學(xué)的多會(huì)導(dǎo)致全面平庸".嗯,前半句是對(duì)的,但后半句是錯(cuò)的.
公司簡(jiǎn)介 | 媒體優(yōu)勢(shì) | 廣告服務(wù) | 客戶寄語(yǔ) | DOIT歷程 | 誠(chéng)聘英才 | 聯(lián)系我們 | 會(huì)員注冊(cè) | 訂閱中心
Copyright © 2013 DOIT Media, All rights Reserved. 北京楚科信息技術(shù)有限公司 版權(quán)所有.