自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

討論:是什么讓我們愛上Javascript?

開發(fā) 后端
過(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)用開始使用Javascript。究竟是什么讓我們愛上Javascript?

今天,我們就來(lái)講講我們?yōu)槭裁磿?huì)有這種觀念,回顧Javascript的歷史來(lái)診斷他的現(xiàn)狀,同時(shí)通過(guò)一些片段來(lái)表明Javascript同其他開發(fā)語(yǔ)言的本質(zhì)不同,唯有如此我們才能明白為何Javascript這么重要。

早期的迷惑

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

我們***次聽說(shuō)Javascript是在1995年,當(dāng)時(shí)Netscape推出了Navigator2.0的Beta版本,這個(gè)版本中沒有包含Javascript,但是有對(duì)于JavaApplet的支持。同時(shí),Netscape宣布頁(yè)面內(nèi)嵌的語(yǔ)言LiveScript。這個(gè)聲明并沒有引起太多的注意,在當(dāng)時(shí)JavaApplet是一個(gè)熱門的技術(shù),當(dāng)時(shí)對(duì)于為什么Netscape要在瀏覽器中內(nèi)嵌兩種語(yǔ)言也不是十分清楚,難道有什么事情L(zhǎng)iveScript能做而Java做不了的么?

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

改名字的另外一個(gè)影響是細(xì)微的,但是我認(rèn)為改善了這個(gè)語(yǔ)言的接受程度。與Java的關(guān)系使這門語(yǔ)言看起來(lái)并不是一個(gè)全新的東西。事實(shí)上,當(dāng)時(shí)Java本身都還不是十分成熟,也還沒有到1.0,但是外界對(duì)于Java成熟狀況的認(rèn)知要比本身高出很多。例如,在1995年,時(shí)代雜志將Java選為當(dāng)年的十大新產(chǎn)品之一。同時(shí),市面上已經(jīng)有很多關(guān)于Java的書籍。所以,當(dāng)Netscape將這項(xiàng)技術(shù)命名為JavaScript,其意圖很明顯就是表明當(dāng)時(shí)的Java開發(fā)團(tuán)體是使用和評(píng)價(jià)JavaScript的***人選。

在懷疑的浪潮中,憑借JavaScript與JavaApplet的通信和控制能力,JavaScript開始出現(xiàn)在一些應(yīng)用中。所以,那些對(duì)Java感興趣的人開始覺得有了學(xué)習(xí)JavaScript的必要。

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

附加的傷害

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

什么是JavaScript能夠可靠的支持的?閃動(dòng)的、基于圖像的視覺效果。人們開始制造一些炫目的效果。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也開始談?wù)揇HTML,但是不久DHTML就變成了Buggy、Slow、Unmaintable網(wǎng)站的代名詞。

對(duì)了,不要忘記安全問題。一般來(lái)講,當(dāng)你構(gòu)建一個(gè)圖靈完備(Turing-Complete)的編程語(yǔ)言時(shí),你就需要特別小心安全問題。Netscape做的不夠好,早期的Javascript中存在漏洞,而且花了很長(zhǎng)時(shí)間才完全解決掉。

結(jié)果是什么?很多的有技術(shù)頭腦的用戶關(guān)閉了瀏覽器的Javascript支持。要知道,在1996年的時(shí)候可以被稱為有“技術(shù)頭腦(TechnicallySavvy)”的人員站的比重相當(dāng)?shù)母?。所以,這些人便不再依賴于JavaScript,因?yàn)檫@會(huì)導(dǎo)致用戶不使用你的網(wǎng)站。

那些使用JavaScript的用戶做的也不夠好。那些嚴(yán)謹(jǐn)?shù)某绦騿T完全拋棄了JavaScript,但是設(shè)計(jì)師和頁(yè)面人員補(bǔ)充了進(jìn)來(lái)。早期的書籍中都提供了糟糕的JavaScript實(shí)例,但是很少去從語(yǔ)義上對(duì)它進(jìn)行分析、闡述。(DavidFlanagan是個(gè)例外)讓事情更糟糕的是,有些人(也許是大多數(shù)人)根據(jù)就沒從書中學(xué)習(xí)過(guò)JavaScript,他們只是從一個(gè)網(wǎng)站現(xiàn)有的代碼中拷貝,修改,然后粘貼到自己的網(wǎng)站上讓它工作,到***都不知道為何這些代碼能夠正常運(yùn)行。

即使大家都是從例子開始學(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è)直系后裔。WaldemarHorwat,一位在JavaScript早期產(chǎn)生重大影響的工程人員說(shuō),我更愿意把JavaScript認(rèn)為是CommonLisp的另一種形式。這個(gè)說(shuō)法有些夸張,但是如果你知道這兩種語(yǔ)言,你就會(huì)很容易發(fā)現(xiàn)兩者之間確實(shí)存在很多相似之處。

所以狀況就變的越來(lái)越不好,一門與之前廣泛傳播的語(yǔ)言有很大不同的新語(yǔ)言,被一些沒有經(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í)也更容易引起問題。

也難怪沒有人會(huì)喜歡她。

帝國(guó)的重建

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

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

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

那段時(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ò)展(SpiderMonkeyc語(yǔ)言編寫,RhinoJava語(yǔ)言編寫)。

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

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

DouglasCrockford一直在研究JavaScript語(yǔ)言的豐富性,***他發(fā)布了一系列有建設(shè)性的文章,例如:TheWorld'sMostMisunderstoodProgrammingLanguage,在這些文章中,他指出了JavaScript在使用中的一些技巧和一些缺點(diǎn)。

Brent、Alex和Doug當(dāng)時(shí)的聲音都很薄弱,就像曠野中的呼聲,但是當(dāng)***其他的Web開發(fā)社區(qū)準(zhǔn)備將注意力投向JavaScript的時(shí)候,他們所作的這些工作讓我們的生活變得更加簡(jiǎn)單了。

我在2000年到2003年中段的時(shí)候,對(duì)于JavaScript的關(guān)注都只是一些零星的片段,我確實(shí)沒有投入太多的關(guān)注,我沉浸在Java的樂土中,閑暇的時(shí)候研究一下Ruby,而正是這段經(jīng)歷為我再一次的認(rèn)識(shí)JavaScript提供了準(zhǔn)備。

在2003年的6月,我的朋友給我演示了netWindows,當(dāng)我從地板上撿起我的下巴來(lái)以后(Afteripickmyjawupoffthefloor,作者還真是幽默),我朋友告訴我說(shuō)Alex這個(gè)人不是瘋子,我如夢(mèng)方醒開始認(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)不知所措的感覺。我當(dāng)時(shí)在想Google一定是有一個(gè)非常成熟的定制化工具來(lái)開發(fā)如此復(fù)雜的客戶/服務(wù)器端管理。

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

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

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

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

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

我已經(jīng)闡明了為什么JavaScript有這個(gè)名聲的眾多原因,其中有好的也有壞的,在這眾多的原因中,我只想重復(fù)一條,他是如此重要,能夠解釋為什么很多有經(jīng)驗(yàn)的程序員經(jīng)給被自己的經(jīng)驗(yàn)所蒙蔽。

這一部分作者以一個(gè)例子來(lái)說(shuō)明了JavaScript的編寫方式和Java是多么的不同,***提出了一些有意義的總結(jié):

Functionsarefirst-classobjects.

Methodsarejustfunctionsattachedtoobjects.

Youcanaddmethodstoclassesatanytime(evenafterinstanceshavebeencreated).

Individualobjectscanhavetheirownmethods.

``Classconstructors''arejustfunctions.

Functions,beingobjects,canhavetheirownproperties.

Youcancallfunctionswithfewer(ormore)argumentsthanthefunctionisdeclaredtotake.

Ifnovalueispassedforafunctionargument,itgetsthevalueundefined.

Javascript總結(jié)

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

AjaxisagatewaydrugforJavaScript.

【編輯推薦】

  1. JavaScript類和繼承:prototype屬性
  2. JavaScript類和繼承:this屬性
  3. ExtJS Grid Tooltip的3+1種實(shí)現(xiàn)方式總結(jié)
  4. JavaScript異步調(diào)用框架的鏈?zhǔn)綄?shí)現(xiàn)
  5. JavaScript異步調(diào)用框架的jQuery風(fēng)格鏈?zhǔn)秸{(diào)用
責(zé)任編輯:彭凡 來(lái)源: cnblogs
相關(guān)推薦

2013-05-16 09:10:15

諾基亞微軟

2015-10-28 10:13:25

中國(guó)軟件網(wǎng)

2022-08-01 07:57:03

數(shù)組操作內(nèi)存

2020-06-01 14:02:25

Vue.js框架模板

2021-08-05 05:02:04

DPU數(shù)據(jù)中心Pensando

2010-01-04 14:37:46

Linux Ubunt

2015-08-03 10:10:29

2014-04-29 10:44:50

驅(qū)動(dòng)開發(fā)開發(fā)

2024-04-10 07:48:41

搜索引擎場(chǎng)景

2022-03-31 18:59:43

數(shù)據(jù)庫(kù)InnoDBMySQL

2010-06-03 15:44:49

WindowsServ

2021-08-27 07:06:10

IOJava抽象

2021-12-29 08:27:05

ByteBuffer磁盤服務(wù)器

2022-03-08 17:52:58

TCP格式IP

2023-02-03 16:03:17

TypescriptJavaScript

2021-07-29 07:55:20

React實(shí)踐代碼

2021-08-09 09:39:59

Docker部署鏡像

2021-07-15 07:23:28

Singlefligh設(shè)計(jì)

2021-11-26 07:00:05

反轉(zhuǎn)整數(shù)數(shù)字

2017-03-16 13:17:54

TDD代碼開發(fā)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)