天天看點

《JavaScript面向對象程式設計指南》——第1章 引言1.1 回顧曆史

本節書摘來自異步社群《javascript面向對象程式設計指南》一書中的第1章,第1.1節,作者: 【加】stoyan stefanov 譯者: 淩傑 更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。

衆所周知,時下所流行的這些web應用,例如yahoo! maps、google maps、yahoo! mail、my yahoo!、gmail、digg以及youtube等都有一些明顯的共同特征,即:它們都是web2.0時代的應用程式,都有非常豐富的人性化互動界面,而這往往意味着大量的javascript應用。事實上,javascript最初也隻不過是一種内嵌于html語句中的單行式腳本語言。但如今已經今非昔比了,對于它今天所擁有的面向對象特性來說,無論是在可重用性方面,還是在可擴充性方面都已經足以支援我們去實作任何網站項目中的行為邏輯了。畢竟,對于今天的标準來說,任何一個符合規範的web頁面都應該包含以下三個要素:内容(html)、外觀(css)和行為(javascript)。

通常來說,javascript程式的運作必須要依賴于某個宿主環境。其中最常見的當然就是我們的web浏覽器了,但請注意,浏覽器并不是javascript代碼唯一的宿主環境。事實上,我們可以利用javascript來建立各種類型的插件工具、應用擴充以及其他形式的元件。總之,學習javascript語言是一件一舉多得的事情,我們可以通過學習這種語言,來編寫各種不同的應用程式。

這本書将着重于介紹javascript語言本身,特别是其中的面向對象特性。我們會從零開始講解這些内容,也就是說,讀這本書無需具備任何的程式設計基礎。另外,除了有一章内容是專門為web浏覽器環境而寫的以外,本書其餘部分介紹的都是javascript的一般特性,适用于任何支援該語言的執行環境。

現在,讓我們進入第1章的學習吧。首先,我們需要先來了解一下javascript背後的發展曆程,而後我們才能逐漸引入面向對象程式設計方面的基本概念。

起初,web站點事實上隻不過是一個靜态的html文檔集,這些文檔之間僅依靠一些簡單的超連結(hyperlinks)綁定在一起。但很快,随着web業務的快速普及和增長,網站管理者越來越希望自己所建立的web頁面能處理更多的事情。例如,他們希望網站具有更豐富的使用者互動能力,以便能完成一些簡單的任務(比如驗證表單之類),加強與伺服器端的資訊互動。那時候,他們有兩種選擇:java applets(後來被證明失敗了)和livescript。其中,livescript就是1995年由netscape公司開發的程式設計語言。netscape 2.0之後,它正式被更名為javascript。

不久,這種對web 頁面中靜态元素進行擴充的方式就在業界大放異彩,令其他的浏覽器廠商也紛紛效仿,推出了自己的類似産品。例如,microsoft公司随後就釋出了支援jscript的internet explorer(ie)3.0。該語言在javascript的基礎上引入了一些ie獨有的特性。最終,為了使語言的實作更趨向于标準化,一個叫做ecmascript(歐洲計算機制造商協會)的組織應運而生了。這才有了我們今天所看到的這份被叫做ecma-262的标準文檔。目前在業界廣為流行的javascript也隻是遵守該标準的一種實作而已。

無論結果是好是壞,javascript在随後爆發的第一次浏覽器大戰(大約是在1996年到2001年間)中得到了迅速的普及。那時正值網際網路發展的第一波繁榮期,主要由netscape和microsoft這兩大浏覽器廠商在争奪市場佔有率。在此過程中,他們不斷地往各自的浏覽器中添加新的特性和各種版本的javascript實作。但他們彼此之間又缺乏共同遵守的标準,這給javascript的開發帶來大量的負面影響,也給開發人員帶來巨大的痛苦。因為在這種情況下,我們通常隻能針對某一個具體的浏覽器來編寫腳本。如果我們把在這個浏覽器上開發的腳本拿到其他浏覽器上測試,就會發現它們完全不能工作。與此同時,由于浏覽器廠商都在忙于繼續增加新的浏覽器特性,以至于根本沒能及時更新相應的工具,這導緻了開發工具的嚴重滞後。

盡管浏覽器廠商引入的不相容性使web開發人員感到難以忍受,但這還隻是問題的一個方面。而另一方面的問題則出在開發人員自己身上,他們在自己的web頁面中使用了太多的新特性,總是迫不及待地想引入浏覽器提供的每一項新功能,以“加強”自己的頁面。例如狀态欄中的動畫、閃爍的顔色、閃爍的文本、會搖晃的浏覽器視窗、螢幕上的雪花效果、能跟蹤對象的滑鼠光标等,而這往往都是以犧牲實用性為代價的。這種濫用現象極大地損壞了javascript在業界的名聲,以至于那些“真正的程式員”(這裡特指那些具有更成熟的程式設計語言背景的開發人員,例如java或c/c++程式員)對javascript根本不屑一顧,或者僅僅把它當做一種用于前端設計的玩具。

出于上述原因,javascript語言在一些web項目中遭到了強烈抵制。某些項目甚至完全拒絕在用戶端上進行任何的程式設計,轉而隻信任他們自己可以掌控的伺服器端。确實,在當時的情況下,也沒有什麼理由值得我們花費雙倍的時間來為這些不同的浏覽器設計項目,然後再花更多的時間去調試它們。

繼續閱讀