Web瀏覽器環境中的JavaScript

來源:互聯網
上載者:User

① 作為全域執行環境的Window對象

在用戶端JavaScript中,表示html文檔的是Document對象Window對象代表顯示該文檔的視窗(或幀)。雖然Document對象和Window對象都很重要,但是相比較而言,Window對象更重要一些,一個本質上的原因是Window對象是用戶端編程中的全域對象。

我們已經知道,JavaScript的每一個實現都有一個全域對象,該對象位於範圍鏈的頭部。這個全域對象的屬性也就是全域變數。用戶端JavaScript的Window對象是全域對象,它定義了大量的屬性和方法,使使用者可以對Web瀏覽器的視窗進行操作。它還定義了引用其他重要對象的屬性,如引用Document對象的document屬性。此外Window對象還包括了兩個自我引用的屬性:window和self。可以使用這兩個全域變數來直接引用Window對象。

由於在用戶端JavaScript中Window對象是全域對象,因此所有的全域變數都被定義為該對象的屬性。例如下面兩行代碼實際上執行的是相同的功能。

var answer=42;window.answer=42;

應用程式中出現的每個視窗都對應一個Window對象,而且都為用戶端JavaScript代碼定義了一個唯一的執行環境。換句話說,JavaScript代碼在一個視窗中聲明的全域變數並不是另一個視窗的全域變數。但是另一個視窗中的JavaScript代碼卻可以存取第一個視窗的全域變數,受到某種安全限制。我們將在以後章節中討論這個問題。

② 用戶端的對象層次和文件物件模型DOM

Window對象是用戶端JavaScript的一個關鍵對象。其他所有的用戶端對象都通過這個對象訪問。例如每個Window對象都定義了一個document屬性,該屬性引用與這個視窗關聯在一起的Document對象,location屬性引用與該視窗關聯在一起的Location對象。當一個Web瀏覽器顯示一個帶幀的文檔,頂層的Window對象的frames[ ]數組包含了對代表幀的Window對象的引用。因此在用戶端JavaScript中,運算式document代表的是當前視窗的Document對象,而運算式frames[1].document引用的是當前視窗的第二個子幀的Document對象。Document對象(以及其他的用戶端JavaScriptd對象)也可以擁有引用其他對象的屬性。例如每個Document對象都有一個forms[
]數組,它包含的是代表該文檔中出現的所有html表單的Form對象。要引用這些表單,可以編寫如下代碼:

window.document.forms[0]

繼續使用上面的例子,每個Form對象都有一個elements[ ]數組,該數組包含了出現在表單中的各種HTML表單元素的對象。在極其特殊的情況下,可以編寫引用整個對象鏈底部的對象的代碼,其運算式的複雜度如下:

parent.frames[0].document.forms[0].elements[3].options[2].text

我們已經知道,Window對象是位於範圍鏈頭部的全域對象,JavaScript中的所有用戶端對象都是作為其他對象的屬性來存取的。這就是說,存在一個JavaScript對象的層次,這個層次的根是一個Window對象。說明了這一層次。仔細研究這幅圖,理解其中的層次以及它所包含的對象。注意僅僅顯示出了那些引用其他對象的屬性。圖中所示的大部分對象具有的方法和屬性都比顯示出來的要多。

圖中顯示的許多個物件都繼承了Document對象。大型的用戶端對象層次的子樹叫做文件物件模型(DOM),它很有趣,因為它已經成為標準化進程的焦點。Document對象已經成為實際標準,所有主流瀏覽器都統一實現了它。它們稱為0級DOM,因為它們構成了文檔功能的基本層級,JavaScript程式員在所有瀏覽器中都可以應用該層級。

③ 事件驅動的編程模型

對於如何響應用戶端使用者的操作,JavaScript採用的是事件驅動的編程模型。Web瀏覽器使用事件(event)來通知程式有使用者輸入。事件的類型有很多種,例如按鍵事件,滑鼠移動事件等等。當一個事件發生時,Web瀏覽器會先嘗試調用一個適合的事件控制代碼函數來響應那個事件。因此要編寫一個動態、互動性的用戶端JavaScript程式,必須先定義一些適當的事件控制代碼,並將它們註冊到系統中,這樣瀏覽器才能在適當的時刻調用它們。在事件驅動的編程模型中,可以編寫大量獨立的事件控制代碼。程式員並不需要直接調用這些處理函數,而是讓系統在適當的時機調用它們。

④ 無幹擾的JavaScript

一種新的叫做無幹擾的JavaScript的用戶端編程模式已經在web開發社區中流行開來。這種模式強調JavaScript自身不應該惹人注意,不應該產生幹擾。編寫無幹擾的JavaScript代碼並沒有確定公式,但是一些有用的實踐還是頗可行的。

⑴ 無幹擾的JavaScript的首要目標就是保持JavaScript代碼和HTML標記的分離。這種讓內容分離於行為的方式,與將CSS放入樣式表而保持內容與表現分離的方式如出一轍。為了實現這一目標,把所有的JavaScript代碼放入到外部檔案中,並且用<script src=>標記把這些檔案包含到HTML頁面中。如果區分內容和行為很嚴格,就不會把JavaScript程式碼封裝含到HTML檔案的事件控制代碼屬性中。相反,會編寫JavaScript代碼(在一個外部檔案中)然後在需要它們的HTML元素上註冊事件控制代碼。為了實現這一目標,要儘可能地讓JavaScript代碼的外部檔案成為模組。這允許把多個獨立的代碼模組包含到同一個web頁面中,而不需要擔心一個模組的變數和函數覆蓋了其他模組的變數和函數。

⑵ 無幹擾的JavaScript的第二個目標是它必須降低優雅性。

⑶ 無幹擾的JavaScript的第三個目標是,它不能降低一個HTML頁面的可訪問性。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.