javascript是一種面向對象語言嗎?如果是,您在javascript中是如何實現繼承的呢


·oop(面向對象程序設計)中最常用到的概念有
1、對象,屬性,方法
1》(對象:具體事物或抽象事物,名詞)
2》(屬性:對象的特征,特點,形容詞)
3》(方法:對象的動作,動詞)

2、類
1》 在現實生活中,相似的對象之間往往都有一些共同的組成特征。例如蜂鳥和老鷹都具有鳥類的特征,因此他們可以
被統稱為鳥類。
2》在OOP中,類實際上就是對象的設計藍圖或者制作配方。
3》對象這個詞,也稱為實例,老鷹是鳥類的一個實例。我們能基於相同的類創建出許多不同的對象,因為類更多的是一種
模板,而對象就是在這些模板的基礎上被創建出來的。
4》但是我們要明白,javascript與C++或java這種傳統的面向對象語言不同,它實際上壓根兒沒有類。該語言的一切都是基於
對象的,其所依靠的是一套原型系統(這里的原型prototype)prototype實際上也是一種對象,我們稍后再來詳細討論這個問題
在傳統的面向對象語言中,我們一般會這樣描述自己的做法:“我基於Person類創建了一個叫做Bob的新對象”。而在這種基於
原型的面向對象語言中,我們則會這樣描述:“我將現有的Person對象擴展成了一個叫做Bob的新對象”。

3、封裝
1》對象所封裝的內容由兩部分組成哦(相關的數據用於存儲屬性,基於這些數據所能做的事(所能調用的方法))
2》初次之外,封裝這個術語中還包含了一層隱藏信息的概念,這完全是另一方面的問題。因此,我們在理解這個
概念時,必須要留意它在具體的OOP語境中的含義。
以一個mp3播放器為例,如果假設這是一個對象,那么作為該對象的用戶,我們無疑需要一些類似於像按鈕,顯示屏這樣的
工作接口,這些接口能幫助我們使用該對象(如播放歌曲之類)。至於它們內部是如何工作的,我們並不清楚,而且多數情況下
也不會在意這些。換句話說,這些接口的實現對我們來說是不可見的。同樣的,在OOP中也是如此。當我們在代碼中調用一個對象
的方法時,無論該對象是來自我們自己的實現還是某個第三方庫,我們都不需要知道該方法是如何工作的。
在編譯型語言中,我們甚至都無法查看這些對象的工作代碼。而由於Javascript是一種解釋型語言,源代碼是可以查看的。
3》關於信息隱藏,還有另一方面內容,即方法與屬性的可見性。在某些語言中,我們能通過Public,private,protected這些關鍵字來限定方法
和屬性的可見性。這種限定分類定義了對象用戶所能訪問的層次。
例如,private方法只有其所在對象內部的代碼才有權訪問,而public方法則是任何人都能訪問的,在Javascript中,盡管所有的方法和屬性都是
public的,但是我們將會看到,該語言還是提供了一些隱藏數據的方法,以保護程序的隱秘性。

4、聚合
1》有時也叫組合,實際上是指我們將幾個現有對象合並一個新對象的過程。
總之這個概念強調的就是這種將多個對象合二為一的能力。
通過聚合這種強有力的方法,我們可以將一個問題分解成多個更小的問題。這樣一來,問題就會顯得更易於管理(便於我們各個擊破),
當一個問題域的復雜程度令我們難以接受時,我們就可以考慮將它分解成若干子問題區,並且必要的話,這些問題區還可以再繼續分解成
更小的分區。這樣做有利於我們從幾個不同的抽象層次來考慮這個問題。

5、重用與繼承
1》通過繼承這種方式,我們可以非常優雅地實現對現有代碼的重用。
2》例如,我們有一個叫做Person的一般性對象,其中包含一些姓名,
出生日期之類的屬性,以及一些功能性函數,如步行,談話,睡覺,吃飯等。
3》然后,當我們發現自己需要一個Programmer對象時,當然,
這時候你可以再將Person對象中所有的方法與屬性重新實現一遍,
4》但除此之外還有一種更聰明的做法,即我們可以讓Programmer繼承自
Person,這樣就省去了我們不少工作。
5》因為Programmer對象只需要實現屬於她自己的那部分特殊功能(例如,編寫代碼)
而其余部分只需重用person的實現即可。

6》在傳統的OOP環境中,繼承通常指的是類與類之間的關系,但由於javascript中不存在類,因此繼承只能發生在對象之間。
7》當一個對象繼承自另一個對象時,通常會往其中加入新的方法,以擴展被繼承的老對象。我們通常將這一過程稱之為“B繼承A”
或“B擴展自A”。另外對於新對象來說,她也可以根據自己的需要,從繼承而來那組方法中選擇幾個來重新定義。這樣做並不會改變
對象的接口,因為方法的名字是相同的,只不過當我們調用新對象時,該方法的行為與之前不同了。我們將這種重定義繼承方法的
過程叫做覆寫。

6、多態
我們的Programmer對象繼承了上一級對象Person的所有方法,這意味着這兩個對象都實現了“talk”等方法,現在,我們的代碼中
有一個叫做Bob的變量,即便是在我們不知道它是一個Person對象還是一個Programmer對象情況下,也依然可以直接調用該對象
的"talk"方法,而不必擔心這會影響代碼的正常工作。類似這種不同對象通過相同的方法調用來實現各自行為的能力,我們就稱之為多態。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM