過(guò)去,人們對(duì)于Javascript一直報(bào)著輕視的態(tài)度,人們認(rèn)為它又慢又容易出錯(cuò),而且在不同瀏覽器中解釋也不一樣,但是現(xiàn)在,Javascript確確實(shí)實(shí)的在改變我們的網(wǎng)絡(luò),越來(lái)越多的網(wǎng)絡(luò)和APP應(yīng)用開(kāi)始使用Javascript。 " /> 亚洲综合中文,少妇一区二区视频,91精品婷婷国产综合久久

色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

是什么讓我們愛(ài)上Javascript

  引子

  過(guò)去,人們對(duì)于Javascript一直報(bào)著輕視的態(tài)度,人們認(rèn)為它又慢又容易出錯(cuò),而且在不同瀏覽器中解釋也不一樣,但是現(xiàn)在,Javascript確確實(shí)實(shí)的在改變我們的網(wǎng)絡(luò),越來(lái)越多的網(wǎng)絡(luò)和APP應(yīng)用開(kāi)始使用Javascript。今天,我們就來(lái)講講我們?yōu)槭裁磿?huì)有這種觀念,回顧Javascript的歷史來(lái)診斷他的現(xiàn)狀,同時(shí)通過(guò)一些片段來(lái)表明Javascript同其他開(kāi)發(fā)語(yǔ)言的本質(zhì)不同,唯有如此我們才能明白為何Javascript這么重要。

  早期的迷惑

  從某種程度上來(lái)講,Javascript是Java的惡魔兄弟(Java's evil twin)。他們同歲,都于1995年以Beta的版本出現(xiàn),并且都在次年1996年推出了1.0版本。在語(yǔ)法上他們也很相近,從名稱上來(lái)看他們就像是一家人一樣。

  我們第一次聽(tīng)說(shuō)Javascript是在1995年,當(dāng)時(shí)NETscape推出了Navigator 2.0的Beta版本,這個(gè)版本中沒(méi)有包含Javascript,但是有對(duì)于Java Applet的支持。同時(shí),NETscape 宣布頁(yè)面內(nèi)嵌的語(yǔ)言LiveScript。

  這個(gè)聲明并沒(méi)有引起太多的注意,在當(dāng)時(shí)Java Applet是一個(gè)熱門(mén)的技術(shù),當(dāng)時(shí)對(duì)于為什么NETscape要在瀏覽器中內(nèi)嵌兩種語(yǔ)言也不是十分清楚,難道有什么事情L(zhǎng)iveScript能做而Java做不了的么?

  2個(gè)月以后,LiveScript看到了曙光,在Navigator 2.0B3中,它被重新命名為JavaScript。這次改動(dòng)吸引了眾多人的關(guān)注。“Oh,他肯定不能體現(xiàn)他的價(jià)值。”、“為什么Sun要讓這么個(gè)玩具來(lái)搭Java的車(chē)?”我至今仍人為這次改名是一個(gè)失敗的主意,因?yàn)樗鹆藷o(wú)盡的困惑,很多非編程人員從來(lái)都沒(méi)有明白過(guò)JavaJavascript是兩個(gè)不同的東西。

  改名字的另外一個(gè)影響是細(xì)微的,但是我認(rèn)為改善了這個(gè)語(yǔ)言的接受程度。與Java的關(guān)系使這門(mén)語(yǔ)言看起來(lái)并不是一個(gè)全新的東西。事實(shí)上,當(dāng)時(shí)Java本身都還不是十分成熟,也還沒(méi)有到1.0,但是外界對(duì)于Java成熟狀況的認(rèn)知要比本身高出很多。例如,在1995年,時(shí)代雜志將Java選為當(dāng)年的十大新產(chǎn)品之一。同時(shí),市面上已經(jīng)有很多關(guān)于Java的書(shū)籍。所以,當(dāng)NETscape將這項(xiàng)技術(shù)命名為JavaScript,其意圖很明顯就是表明當(dāng)時(shí)的Java開(kāi)發(fā)團(tuán)體是使用和評(píng)價(jià)JavaScript的最佳人選。
在懷疑的浪潮中,憑借JavaScript與Java Applet的通信和控制能力,JavaScript開(kāi)始出現(xiàn)在一些應(yīng)用中。所以,那些對(duì)Java感興趣的人開(kāi)始覺(jué)得有了學(xué)習(xí)JavaScript的必要。

  Javascript就像一個(gè)玩具,它是面向?qū)ο蟮模械臇|西都是公有的,沒(méi)有封裝。另外,你無(wú)法創(chuàng)建真正的子類(lèi),在實(shí)例變量和方法之間并沒(méi)有真正的區(qū)別,這就像一個(gè)災(zāi)難。你可以在任何時(shí)候?qū)⒁粋€(gè)變量變成一個(gè)方法。在這方面我并不是孤獨(dú)的,雖然對(duì)于面向?qū)ο蟮募?xì)節(jié)每個(gè)人的理解都有所不同,但是Java程序員幾乎無(wú)一例外的認(rèn)為,JavaScript并不是一門(mén)嚴(yán)肅的編程語(yǔ)言,我們也不像用它來(lái)做些什么。

  附加的傷害

  在早期的時(shí)候,JavaScript并沒(méi)有什么真正的技術(shù)問(wèn)題,它是緩慢又充滿風(fēng)險(xiǎn)的,并且只在NETscape下工作。后來(lái)IE也支持了,但并不是完全兼容。人們吹捧他用來(lái)編寫(xiě)頁(yè)面的applets,但是它并不能檢測(cè)applet的失敗。它從來(lái)沒(méi)有被廣泛的使用過(guò),很快他就成為了一個(gè)分母,人們僅僅用它來(lái)完成那些可靠的任務(wù),并且避免在其他的地方使用。

  什么是JavaScript能夠可靠的支持的?閃動(dòng)的、基于圖像的視覺(jué)效果。人們開(kāi)始制造一些炫目的效果。NETscape引導(dǎo)了這個(gè)趨勢(shì),在頁(yè)面中使用令人生厭的圖層干擾了人們對(duì)正常內(nèi)容的瀏覽。那些各種各樣閃動(dòng)、滾動(dòng)的效果讓我們認(rèn)為這個(gè)標(biāo)簽簡(jiǎn)直就是網(wǎng)絡(luò)的原罪。到處都充斥著閃動(dòng)的Banner、滾動(dòng)的Banner、狀態(tài)欄里跳動(dòng)的文字、隨時(shí)可能彈出的對(duì)話框、...各種各樣的濫用還在不斷繼續(xù)。Miscorsoft也開(kāi)始談?wù)揇HTML,但是不久DHTML就變成了Buggy、Slow、Unmaintable網(wǎng)站的代名詞。

  對(duì)了,不要忘記安全問(wèn)題。一般來(lái)講,當(dāng)你構(gòu)建一個(gè)圖靈完備(Turing-Complete)的編程語(yǔ)言時(shí),你就需要特別小心安全問(wèn)題。NETscape做的不夠好,早期的Javascript中存在漏洞,而且花了很長(zhǎng)時(shí)間才完全解決掉。
結(jié)果是什么?很多的有技術(shù)頭腦的用戶關(guān)閉了瀏覽器的Javascript支持。要知道,在1996年的時(shí)候可以被稱為有“技術(shù)頭腦(Technically Savvy)”的人員站的比重相當(dāng)?shù)母摺K裕@些人便不再依賴于JavaScript,因?yàn)檫@會(huì)導(dǎo)致用戶不使用你的網(wǎng)站。

  那些使用JavaScript的用戶做的也不夠好。那些嚴(yán)謹(jǐn)?shù)某绦騿T完全拋棄了JavaScript,但是設(shè)計(jì)師和頁(yè)面人員補(bǔ)充了進(jìn)來(lái)。早期的書(shū)籍中都提供了糟糕的JavaScript實(shí)例,但是很少去從語(yǔ)義上對(duì)它進(jìn)行分析、闡述。(David Flanagan是個(gè)例外)讓事情更糟糕的是,有些人(也許是大多數(shù)人)根據(jù)就沒(méi)從書(shū)中學(xué)習(xí)過(guò)JavaScript,他們只是從一個(gè)網(wǎng)站現(xiàn)有的代碼中拷貝,修改,然后粘貼到自己的網(wǎng)站上讓它工作,到最后都不知道為何這些代碼能夠正常運(yùn)行。
即使大家都是從例子開(kāi)始學(xué)習(xí)JavaScript,只要保證兩件事情這也許會(huì)成為一個(gè)很好的策略。第一個(gè)就是大家都學(xué)習(xí)好的例子,但顯然JavaScript并不屬于這種情況。第二種情況就是這種語(yǔ)言應(yīng)該和學(xué)習(xí)它的人所知道的另外一種語(yǔ)言相似,但是很不幸,雖然JavaScript從語(yǔ)義上看來(lái)和Java非常相近,但實(shí)際上JavaScript來(lái)自一個(gè)和Java完全不同的編程語(yǔ)言家族。JavaScript是NewtonScript、Self、Smalltalk...和Lisp語(yǔ)言的一個(gè)直系后裔。Waldemar Horwat,一位在JavaScript早期產(chǎn)生重大影響的工程人員說(shuō),我更愿意把JavaScript認(rèn)為是Common Lisp的另一種形式。這個(gè)說(shuō)法有些夸張,但是如果你知道這兩種語(yǔ)言,你就會(huì)很容易發(fā)現(xiàn)兩者之間確實(shí)存在很多相似之處。
所以狀況就變的越來(lái)越不好,一門(mén)與之前廣泛傳播的語(yǔ)言有很大不同的新語(yǔ)言,被一些沒(méi)有經(jīng)驗(yàn)的編程者推廣,其他的編程人員Follow了他們的例子。更多的用戶基于安全考慮關(guān)閉了JavaScript的支持,還有有經(jīng)驗(yàn)的程序員推薦大家避免使用JavaScript。

  上面的這些還不夠,瀏覽器大戰(zhàn)似乎一觸即發(fā),兒JavaScript被選作了一種武器。戰(zhàn)爭(zhēng)中的雙方都不斷的發(fā)展JavaScript,有時(shí)候甚至故意引入了很多不兼容特性。JavaScript此時(shí)已經(jīng)變得更龐大,但同時(shí)也更容易引起問(wèn)題。
也難怪沒(méi)有人會(huì)喜歡她。

  帝國(guó)的重建

  在那段時(shí)間,我還是不斷聽(tīng)到更多關(guān)于JavaScript的消息。關(guān)于基于prototype和面向?qū)ο蟮奶匦缘慕榻B總是讓我很好奇,我曾經(jīng)看到過(guò)的教材里從來(lái)沒(méi)有提到過(guò)這些,也許是作者本人也沒(méi)有必要的語(yǔ)言背景去將這些概念聯(lián)系起來(lái)。同時(shí),人們開(kāi)始指出由于瀏覽器造成了多少錯(cuò)誤,而不是JavaScript本身。

  后來(lái),IE贏了,NETscape投降了,這一階段的瀏覽器大戰(zhàn)結(jié)束了。Miscrosoft開(kāi)始將他們的bug光芒覆蓋到CSS領(lǐng)域(任何處理過(guò)IE6下頁(yè)面開(kāi)發(fā)的工程師都應(yīng)該深有感受),而Mozila的團(tuán)隊(duì)則開(kāi)始認(rèn)真的考慮兼容性的問(wèn)題。除了一些根深蒂固的區(qū)別,想要修改他們必須大量的修改源碼,這個(gè)小組修復(fù)大多數(shù)的不同,于是IE和Mozilla/Firefox下的JavaScript變得更可控了。其他的開(kāi)發(fā)者也更加的有跡可循。

  JavaScript和瀏覽器的內(nèi)置支持開(kāi)始進(jìn)入了一段穩(wěn)固的發(fā)展時(shí)期。在我們大家都忙著寫(xiě)自己的JavaScript代碼的時(shí)候,幾乎沒(méi)有人注意到一個(gè)具有傳奇色彩的特性引入-XMLHttpRequest。最重要的DHTML特性,Ajax的重要部分,悄悄的加入到了IE中來(lái)。Microsoft的Outlook小組引入了這個(gè)ActiveX控件來(lái)使Outlook支持網(wǎng)絡(luò)訪問(wèn)。200年的Ajax Experience的大會(huì)上,Dion Almaer和Ben Galbraith做了很多關(guān)于XMLHttpRequest的工作,但是在Mozilla第一次引入XMLHttpRequest支持的時(shí)候的官方文件中,他的特性根本就沒(méi)有提到。

  那段時(shí)間有很多JavaScript的活動(dòng),在JavaScript的支持下,Macromedia為Flash提供了腳本語(yǔ)言支持。Adobe也在不斷努力使他們的很多程序可以使用JavaScript來(lái)控制和擴(kuò)展。Apple將JavaScript嵌入了它的Sherlock應(yīng)用中。當(dāng)然,Mozilla項(xiàng)目也做出了一個(gè)重要決定,他們大部分的瀏覽器都可以支持JavaScript。很明顯,JavaScript已經(jīng)不再僅僅是一個(gè)網(wǎng)頁(yè)語(yǔ)言,而成為了程序中嵌入的動(dòng)態(tài)的、運(yùn)行時(shí)擴(kuò)展的編程語(yǔ)言的首選。其中的原因也許是當(dāng)時(shí)大家或多或少的都會(huì)一些JavaScript,還有當(dāng)時(shí)存在兩個(gè)高質(zhì)量的嵌入擴(kuò)展(SpiderMonkey c語(yǔ)言編寫(xiě),Rhino Java語(yǔ)言編寫(xiě))。

  在2000年的時(shí)候,一些人(著名的Brent Ashley、Alex Russell、Douglas Crockford)開(kāi)始注意到JavaScript究竟能做什么。Brend開(kāi)始研究JavaScript與服務(wù)器通信的方法,提出了我們現(xiàn)在公認(rèn)的Ajax Style。而且在當(dāng)時(shí)瀏覽器對(duì)于XMLHttpRequest支持不是很完善的時(shí)候,他增加或者形成了很多完成這項(xiàng)處理的很多巧妙的方法。他建立了一個(gè)網(wǎng)站“Remote Scripts Resources”,并且編寫(xiě)了一個(gè)JavaScript Remote Scripting (JSRS)庫(kù)來(lái)支持不同瀏覽器的兼容性。

  Alex Russel建立了一個(gè)NETWindow項(xiàng)目,意圖建立一個(gè)支持富UI、可編程、圖形環(huán)境的網(wǎng)頁(yè),同時(shí)帶有完全可拖動(dòng)的窗口和其他小組件,NETWindows變成了nWigets,并且最終催生了Dojo Project,一個(gè)當(dāng)前重要的Ajax框架。

  Douglas Crockford一直在研究JavaScript語(yǔ)言的豐富性,最后他發(fā)布了一系列有建設(shè)性的文章,例如:The World's Most Misunderstood Programming Language,在這些文章中,他指出了JavaScript在使用中的一些技巧和一些缺點(diǎn)。

  Brent、Alex和Doug當(dāng)時(shí)的聲音都很薄弱,就像曠野中的呼聲,但是當(dāng)最后其他的Web開(kāi)發(fā)社區(qū)準(zhǔn)備將注意力投向JavaScript的時(shí)候,他們所作的這些工作讓我們的生活變得更加簡(jiǎn)單了。
我在2000年到2003年中段的時(shí)候,對(duì)于JavaScript的關(guān)注都只是一些零星的片段,我確實(shí)沒(méi)有投入太多的關(guān)注,我沉浸在Java的樂(lè)土中,閑暇的時(shí)候研究一下Ruby,而正是這段經(jīng)歷為我再一次的認(rèn)識(shí)JavaScript提供了準(zhǔn)備。
在2003年的6月,我的朋友給我演示了NETWindows,當(dāng)我從地板上撿起我的下巴來(lái)以后(After i pick my jaw up off the floor,作者還真是幽默),我朋友告訴我說(shuō)Alex這個(gè)人不是瘋子,我如夢(mèng)方醒開(kāi)始認(rèn)真的研究JavaScript,現(xiàn)在看來(lái),當(dāng)時(shí)Google也有一幫人在做同樣的事情。

  偉大的革命

  每個(gè)看這篇文章的人都應(yīng)該知道一些Ajax第一次引爆屏幕的情景,今天我來(lái)簡(jiǎn)短的說(shuō)一些完整的情節(jié)。

  第一個(gè)引起我注意的Ajax應(yīng)用是Gmail。很明顯,他先是下載了很多的JavaScript,然后在后臺(tái)不斷地與服務(wù)器進(jìn)行通信,避免頁(yè)面的刷新。他確實(shí)給人非常深的印象,同時(shí)也給其他的技術(shù)團(tuán)隊(duì)帶來(lái)不知所措的感覺(jué)。我當(dāng)時(shí)在想Google一定是有一個(gè)非常成熟的定制化工具來(lái)開(kāi)發(fā)如此復(fù)雜的客戶/服務(wù)器端管理。

  真正讓我明白的是Google的Google Suggest。現(xiàn)在的人一定很熟悉,當(dāng)我們輸入的時(shí)候,通過(guò)與服務(wù)器的交互將我們可能需要的詞條顯示出來(lái)供我們選擇。

  Google Suggest在兩個(gè)方面讓我印象深刻,第一是他是如此簡(jiǎn)單以至于大多數(shù)的技術(shù)人員都能夠明白他的工作原理并且應(yīng)用到自己的網(wǎng)絡(luò)項(xiàng)目中;另外一個(gè)是Google Suggest針對(duì)用戶的每次keyup事件進(jìn)行相應(yīng)和通信,讓我看到同服務(wù)器通信是如此的簡(jiǎn)單,我完全被折服了。

  不久以后又襲來(lái)了Google Maps,Jess James Garret形成了Ajax這個(gè)術(shù)語(yǔ),從此以后討論變得更加方便。

  從此以后,Ajax變成了我們處理網(wǎng)絡(luò)應(yīng)用的的標(biāo)準(zhǔn)方法。而且現(xiàn)在我們有了更多的工具和第三方庫(kù)選擇,但我們又陷入另一個(gè)難題:選擇太多了。

  停止擔(dān)心,愛(ài)上DOM

  我已經(jīng)闡明了為什么JavaScript有這個(gè)名聲的眾多原因,其中有好的也有壞的,在這眾多的原因中,我只想重復(fù)一條,他是如此重要,能夠解釋為什么很多有經(jīng)驗(yàn)的程序員經(jīng)給被自己的經(jīng)驗(yàn)所蒙蔽。
這一部分作者以一個(gè)例子來(lái)說(shuō)明了JavaScript的編寫(xiě)方式和Java是多么的不同,最后提出了一些有意義的總結(jié):

      Functions are first-class objects.
      Methods are just functions attached to objects.
      You can add methods to classes at any time (even after instances have been created).
      Individual objects can have their own methods.
      ``Class constructors'' are just functions.
      Functions, being objects, can have their own properties.
      You can call functions with fewer (or more) arguments than the function is declared to take.
      If no value is passed for a function argument, it gets the value undefined.

  總結(jié)

  最后讓我們每一位JavaScript開(kāi)發(fā)者來(lái)正確的認(rèn)識(shí)JavaScript,用它來(lái)完成他應(yīng)當(dāng)完成的任務(wù)。

  Ajax is a gateway drug for JavaScript.   

  [參考資料]
  1、Learn To love Javascript: http://vanderburg.org/Writing/LearningToLoveJavaScript/
  2、NewtonScript: http://en.wikipedia.org/wiki/NewtonScript
  3、Java In Best Top Ten of 1995: http://www.time.com/time/magazine/article/0,9171,983903,00.html

it知識(shí)庫(kù)是什么讓我們愛(ài)上Javascript,轉(zhuǎn)載需保留來(lái)源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 织金县| 潢川县| 洛阳市| 奈曼旗| 临夏市| 垦利县| 海南省| 喀什市| 株洲市| 深圳市| 手游| 岑巩县| 云安县| 红安县| 焦作市| 江山市| 兴文县| 奈曼旗| 通许县| 潼关县| 华池县| 静乐县| 元阳县| 五家渠市| 宜城市| 东台市| 新津县| 罗田县| 雷波县| 姜堰市| 肇东市| 连山| 南溪县| 鄄城县| 高雄县| 平乐县| 墨江| 襄垣县| 崇义县| 衡阳县| 彰化县|