基於對象還是物件導向?
物件導向技術是現代軟體開發中的重要技術之一。物件導向變成的好處毋庸置疑,現在的主流語言如 Java、C++都是物件導向的。現在的物件導向理論更多的是使用Java或C++進行描述,究其根源,在於這 些語言都是傳統的物件導向語言,具有物件導向理論所指明的一切特性:類、封裝、繼承、多態等等。
相比而言,一些動態語言如JavaSript就顯得不那麼物件導向——至少,在JavaScript中 並沒有類class這一關鍵字。但是,在JavaScript中並不是沒有類的概念。於是有人說,JavaScript是基 於對象的語言,而不是物件導向的語言。
物件導向的語言具有三個特性:封裝、繼承和多態,三者缺一不可;基於對象的語言通常僅僅是使用 對象,其實現的是封裝,並沒有提供後兩種特性。的確,從文法上來說,JavaScript並沒有特定的文法 或者在語言層級上來實現繼承和多態。但是,這並不妨礙我們使用這些特性。這是因為,JavaScript是 一種靈活的語言,它是相當的靈活,以至於這些並沒有提供的東西,更確切的說,是沒有明確的表明的 東西,都是可以實現和使用的!那麼,你還能說JavaScript是基於對象而不是物件導向的嗎?
物件導向也是一種思想,任何語言,包括C語言,同樣可以使用物件導向的思想去解決現實生活中的 各種問題。到底是基於對象還是物件導向,這些概念讓電腦哲學家門去爭論吧——相信他 們的爭論最終也會和先有雞還是先有蛋的問題一樣的結果——我們所要做的,是要使用這種 語言提供的機制去解決我們的問題。
為什麼要有JavaScript的物件導向編程?
這個問題很嚴肅——這取決你問題的規模和應用的範圍。就像JavaEE和PHP一樣:PHP能實 現的東西,JavaEE都能實現,那麼,為什麼還要有PHP?因為JavaEE太複雜了,對於一些簡單的系統,根 本沒有必要是使用它,也就是所謂的“殺雞焉用牛刀”。
JavaScript主要應用於Web開發中。在傳統的Web開發模式中,JavaScript起到的是一些點綴的作用, 只完成很有限的功能,例如表單驗證等。於是,JavaScript多被當做一種過程性語言使用,很難完成複 雜的功能。而今天Web2.0的時代,Ajax大行其道,很多複雜的指令碼成為其必須的組成部分。在Ajax應用 中利用JavaScript物件導向編程風格,能夠使邏輯更加清晰,也更有利於問題的解決。
如果你想用JavaScript編寫一個庫,比如ExtJS或者YUI,很難想象你的類庫不使用物件導向的編程風 格——否則的話,無論是對你還是對使用者的智力都將是一個前所未有的考驗!或許,自從 物件導向思想提出之後,已經很難有類庫不使用物件導向的方式實現了,即便是C語言的庫諸如 gtk+, 也是用C語言將物件導向的思想表現的天衣無縫。物件導向的思想對於大型程式的編寫和使用具有不可替 代的作用。
本系列文章將試圖向讀者闡述JavaScript的物件導向程式設計。儘管JavaScript中具有很多瀏覽器相 關的概念,如 document等內建對象,但是本系列將不涉及這些問題,並且將假設讀者已經有JavaScript 基礎的文法知識等。本系列文章不會從頭開始講述 JavaScript的文法,僅僅從純粹的物件導向角度審視 JavaScript,或許,你將會看到一個教程:物件導向程式設計——JavaScript 語言描述。這 才是本系列文章的目的。
出處:http://devbean.blog.51cto.com/448512/163556