讀古今文學網 > 編寫高質量代碼:改善JavaScript程序的188個建議 > 第9章 JavaScript編程規範和應用 >

第9章 JavaScript編程規範和應用

每種語言都有自己的不足之處,都存在低效模式。隨著越來越多的人選用JavaScript語言,它的應用邊界也在不斷擴展。自2005年以來,Ajax應用對JavaScript和瀏覽器的推動作用遠超過以前,其結果是出現了一些非常具體的模式,這其中有優秀的做法,也有糟糕的做法。

也許,很多程序員會無休止地討論良好的語言風格是由什麼構成的。有些程序員堅定地擁護曾經的用法,比如在學校或在開始工作時養成的編程習慣,完全沒有代碼風格的意識。事實證明,代碼風格在編程中是非常重要的,就像文字風格對於寫作非常重要一樣。好的代碼風格能夠更好地閱讀,更為關鍵的是能夠提高代碼的執行效率。

建議165:不要混淆JavaScript與瀏覽器

語言和環境是兩個不同的概念。提及JavaScript,很多讀者可能會想到瀏覽器。脫離環境的JavaScript代碼是不能夠運行的,這與其他系統級的語言有著很大的不同。例如,C語言可以用於開發系統和製造環境,而JavaScript只能夠寄生在某個具體的環境中才能夠工作。

JavaScript運行環境一般都由宿主環境和執行期環境構成。其中宿主環境是由外殼程序生成的,如瀏覽器就是一個外殼程序,它提供了一個可控制瀏覽器窗口的宿主環境。執行期環境則由嵌入到外殼程序中的JavaScript引擎(或稱為JavaScript解釋器)生成,在這個環境中JavaScript能夠生成內置靜態對像和初始化執行環境等(如圖9.1所示)。

圖 9.1 JavaScript運行環境

(1)宿主環境

宿主環境一般由外殼程序創建和維護,它不僅為JavaScript語言提供服務,還可以運行很多種腳本語言。這與Java虛擬機功能類似。

宿主環境一般會創建一套公共對像系統,這套對像系統對所有腳本語言開放,允許它們自由訪問。同時,宿主環境還會提供公共接口,用來裝載不同的腳本語言引擎。這樣可以在同一個宿主環境中裝載不同的腳本引擎,並允許它們共享宿主對象。

腳本語言與獨立的語言是有區分的,JavaScript是一種腳本語言,它本身不提供I/O(輸入和輸出)接口,也沒有與系統和外界通信的能力,更不能夠有操作外圍設備、管理內存、修改註冊表等更低級的行為,這些功能全部交給宿主環境來完成。例如,在客戶端瀏覽器(外殼程序)的宿主環境中,JavaScript通過window對象的alert方法以及document對象的write和writeln方法輸出信息,而借助window對象的prompt方法接收信息。當然,在其他宿主環境中可能會使用不同的宿主對像來完成以上功能。例如,在Windows環境中,微軟公司開發的WSH(Windows Script Host)就是一種腳本語言的宿主環境,它就定義了wscript對像(類似window對像)來表示全局對象。

不僅Web瀏覽器是外殼程序,只要能夠提供JavaScript引擎執行的環境都可以算做外殼程序。很多服務器、桌面應用系統也都提供能夠允許JavaScript引擎執行的運行環境,這些運行環境也是宿主環境。同時,大部分JavaScript引擎自身也帶有一個用於代碼調試的程序,在這個簡單的程序被運行時,也會創建一個宿主環境。

另外,外殼程序還可以通過符合標準的擴展接口接納更多的插件、組件或ActiveX控件等.DLL擴展應用。例如,Web瀏覽器自定義的DOM組件,這個符合W3C標準的DOM組件就是通過宿主環境與JavaScript引擎進行聯繫的。Web瀏覽器允許JavaScript引擎對其進行控制,並通過DOM組件實現對HTML或XML文檔的操作。

(2)執行期環境

執行期環境是由宿主環境通過腳本引擎創建的,實際上就是由JavaScript引擎創建的一個代碼解析初始化環境。初始化內容主要包括:

❑一套與宿主環境相聯繫的規則。

❑JavaScript引擎內核(基本語法規範、邏輯、命令和算法)。

❑一組內置對像和API。

❑其他約定。

當然,不同的JavaScript引擎定義的初始化環境是不同的,這就形成了所謂的瀏覽器兼容性問題,因為不同的瀏覽器使用不同的JavaScript引擎。