Ajax基礎教程(5)- 5.7 實現進階JavaScript技術

來源:互聯網
上載者:User

我們假設本書的讀者對JavaScript至少有基本的實踐知識。如果要提供JavaScript的全面教程,這本身就需要一本完整的書才能講清楚,所以在這裡我們不打算詳細介紹這種語言。相反,本節只是討論JavaScript的一些可能鮮為人知的進階特性,並說明如何在你的Ajax開發中結合使用這些特性。

我們先來簡單地談談JavaScript的曆史,以便你瞭解它原來是什麼樣子,又是怎麼發展到今天的。Netscape的Brendan Eich於1995年開發了JavaScript。他的任務本來是開發一種方法,使得建立和維護Web網站的非專業Web設計人員能夠更容易地使用Java applet。Eich認為,適當的選擇是開發一種不需要編譯器的弱類型語言。

最初,Eich開發的這個語言有過很多名字,不過,後來由於Java在市場上大獲成功,因此藉著這股東風,最後命名為JavaScript。JavaScript很快成為Web上最流行的指令碼語言,這要歸功於它的低門檻,另外還因為它能夠把JavaScript指令碼從一個頁面複製到另一個頁面。在JavaScript和Navigator DOM的早期修訂版本基礎上,產生了DOM Level 0標準,該標準將表單元素和映像定義為DOM元素的子項目。

Microsoft迎頭趕上,建立了自己的指令碼語言VBScript。VBScript在功能上與JavaScript類似,但採用了類Visual Basic文法,而且只能用於IE。Microsoft還提供了JavaScript的一個實現JScript(現在已由ECMA標準化並稱為ECMAScript)。儘管不同JavaScript的文法幾乎是一樣的,但不同瀏覽器上DOM實現卻大相徑庭,以至於幾乎不可能建立跨瀏覽器的指令碼。使用“最小公分母”方法得到的指令碼通常只能完成最簡單的任務。

到了1998年,Netscape開放了其瀏覽器的原始碼,決定開始重寫瀏覽器,並把重點放在遵循W3C標準上。那時,IE 5是W3C DOM和ECMAScript的最佳實現。開源版本的Netscape以Mozilla為名於2002年問世。由此開始,瀏覽器領域形成了一個趨勢:越來越多的瀏覽器開始努力遵循W3C和ECMA維護的Web標準。如今,現代瀏覽器(如Firefox、Mozilla、Opera、Konqueror和Safari)都嚴格遵循Web標準,這就大大簡化了編寫跨瀏覽器的HTML和JavaScript等的任務。IE 6與1998年的IE 5並沒有太大差別,它嚴格禁止了最不合標準的行為。

5.7.1 通過prototype屬性建立物件導向的JavaScript

JavaScript通過一種連結機制來支援繼承,而不是通過完全物件導向語言(如Java)所支援的基於類的繼承模型。每個JavaScript對象都有一個內建的屬性,名為prototype。prototype屬性儲存著對另一個JavaScript對象的引用,這個對象作為當前對象的父物件。

當通過點記法引用對象的一個函數或屬性時,倘若對象上沒有這個函數或屬性,此時就會使用對象的prototype屬性。當出現這種情況時,將檢查對象prototype屬性所引用的對象,查看是否有所請求的屬性或函數。如果prototype屬性引用的對象也沒有所需的函數或屬性,則會進一步檢查這個對象(prototype屬性引用的對象)的prototype屬性,依次沿著鏈向上尋找,直到找到所請求的函數或屬性,或者到達鏈尾,如果已經到達鏈尾還沒有找到,則返回undefined。從這個意義上講,這種繼承結構更應是一種“has a”關係,而不是“is a”關係。

如果你習慣於基於類的繼承機制,那麼可能要花一些時間來熟悉這種prototype機制。prototype機制是動態,可以根據需要在運行時配置,而無需重新編譯。你可以只在需要時才向對象增加屬性和函數,而且能動態地把單獨的函數合并在一起,來建立動態、全能的對象。對prototype機制的這種高度動態性可謂褒貶不一,因為這種機制學習和應用起來很不容易,但是一旦正確地加以應用,這種機制則相當強大而且非常健壯。

這種動態性與基於類的繼承機制中的多態概念異曲同工。兩個對象可以有相同的屬性和函數,但是函數方法(實現)可以完全不同,而且屬性可以支援完全不同的資料類型。這種多態性使得JavaScript對象能夠由其他指令碼和函數以統一的方式處理。

圖5-15顯示了實際的prototype繼承機制。這個指令碼定義了3類對象:Vehicle、Sports-

Car和CementTruck。Vehicle是基類,另外兩個類由此繼承。Vehicle定義了兩個屬性:wheelCount和curbWeightInPounds,分別表示Vehicle的車輪數和總重量。JavaScript不支援抽象類別的概念(抽象類別不能執行個體化,只能由其他類擴充),因此,對於Vehicle基類,wheelCount預設為4,curbWeightInPounds預設為3 000。

圖5-15 Vehicle、SportsCar和CementTruck對象之間的關係

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.