亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

Javascript面向對象編程指南(一)

2019-11-10 18:40:10
字體:
來源:轉載
供稿:網友

/* ES5中除了引入一些新的對象與屬性外,他還提供了“嚴格模式”,所謂嚴格模式就是在ES5發布之前,世面上個版本互不兼容語言的子集。嚴格模式就是可選的,也就是說,選擇以嚴格模式執行的代碼(以函數為單位,或者整個程序)都必須在其頭部作一下聲明: “user strick”; 或許在以后的版本中,嚴格模式有個能成為ES的默認格式,甚至是唯一模式但現在它還是一個可選項。 */

面向對象的程序設計


在深入學習javascript之前,我們首相要了解一下“面向對象”的具體含義,以及這種程序設計風格的主要特征。下面我們列出一系列面向對象程序設計(OOP)中最常用到的概念:

對象、方法、屬性; 類; 封裝; 聚合; 重用與繼承; 多態。

對象

所謂對象,實際上就是指“事物”(包括人和物)在程序設計語言中的表現形式。這里的“事物”可以是任何東西(如某個客觀存在的對象,或者某些較為抽象的概念)。例如對于貓這種常見的對象來說,我們可以看到他們具有某些明確的特征(如顏色、名字、體型等),能執行某些動作(如喵喵叫、睡覺、躲起來、逃跑等)。在OOP語義中,這些對象特征都叫做屬性,而那些動作則被稱為方法。

此外,我們還有個一口語方面的類比:

對象往往是用名詞來表示的方法一般都是些動詞屬性值則往往是一些形容詞

我們可以試一下。例如“一只黑色的貓在我頭上睡覺”這個句子中,“貓”就是一個對象,“黑色”則是一個顏色屬性值,而“睡覺”則是一個動作,也就是OOP語義中的方法。甚至,為了進一步證明這種類比的合理性,我們也將句子中的“在我頭上”看作動作“睡覺”的一個限定條件,因此,它也可以被當作被傳遞給“睡覺”方法的一個參數。

在現實生活中,相似對象之間往往都有一些共同的組成特征。列如蜂鳥和老鷹都具有鳥類的特征,因此他們可以被統稱為鳥類。在OOP中類實際上就是對象的設計藍圖或制作配方。“對象”這個詞我們有時候也叫做“實例”。所以我們可以說老鷹是鳥類的一個實例。我們可以基于同一個類創建處許多不同的對象。因為類更多的是一種模板,而對象則是在這些模板上被創建出來的實體。

但我們要明白,Javascript壓根就沒有類。該語言的一切都是基于對象,其依靠的是一套原型(PRotoetype)系統。而原型本身實際上也是一種對象,我們后面也會來詳細討論這個問題。在傳統的面向對象的語言中,我們一般會這樣描述自己的做法:“我基于person類創建個一個叫做Bob的新對象”。而在這種基于原型的面向對象語言中,我們則要這樣描述:“我將現有的person對象擴展成了一個叫做Bob的新對象”。

封裝

封裝是另一個與OOP相關的概念,其主要用于闡述對象中所包含的內容。封裝的概念通常由兩部分組成。

相關的數據(用于存儲屬性)基于這些數據所能做的事(所能調用的方法)

除此之外,這個術語中還有另一層信息隱藏的概念,這完全是另一方面的問題。因此我們在理解這個概念時,必須要留意它在OOP中的具體語境。

以一個MP3播放器為例。如果我們假設它是一個對象,那么作為該對象的用戶,我們需要一些類似與像按鈕、顯示屏這樣的接口。這些接口會幫助我們使用該對象(如播放歌曲等)。至于他們內部是如何工作的,我們并不清楚,而且大多數情況下也不會在乎這些。換句話說,這些接口的實現對我來說的隱藏的。同樣的,在OOP中也是如此。當我們在代碼中調用一個對象的方法時,無論該對象是來自我們自己實現還是某個第三方庫,我們都不需要知道該方法是如何工作的。在編譯型語言中,我們甚至都無法查看這些對象的工作代碼。

聚合

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

例如,個人電腦是一個非常復雜的對象,我們不可能知道它啟動時所發生的全部事情。但如果我們將這個問題的抽象級別降低到一定的程度,只關注它幾個組件對象的初始化工作,例如顯示器對象、鼠標對象、鍵盤對象等,我們就很容易深入了解這些子對象情況,然后再將這些部分的結構合并起來,之前的那個復雜的問題就迎刃而解了。

繼承

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

在傳統的OOP環境中,繼承通常指的時類與類之間的關系,但由于JS中不存在類,因此它的繼承只發生在對象之間。

當一個對象繼承自另一個對象時,通常會往其中加入新的方法,以擴展被繼承的老對象。我們通常將這一過程稱之為“B繼承自A”或“B擴展自A”。另外對于新對象來說,它可以根據自己的需要從繼承的那組方法中選擇幾個來重新定義。這樣做并不會改變對象的接口,因為其方法名是相同的,只不過當我們調用新對象時,該方法的行為與之前的不同了。我們將這種重定義繼承方法的過程叫做覆寫。

多態

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

OOP小結

特征描述 相應概念
Bob是一個男人 對象
Bob出生于1990年,男性黑頭發 屬性
Bob能吃飯、睡覺、喝水、做夢,以及記錄自己的年齡 方法
Bob是Programmer類的一個實例 傳統OOP中的類
Bob是一個由Programmer對象擴展而來的新對象 基于原型OOP中的原型對象
Bob對象包含了數據(出生日期等)和基于這些數據的方法(例如記錄年齡) 封裝
我們并不需要知道其記錄年齡的方法是如何實現的。對象通常都可以擁有一個私有數據,例如對閏年二月的天數,我們就不知道,而且也不會想知道 信息隱藏
Bob只是整個WEB開發團隊對象的一部分,此外開發團隊還包含了一個Designer對象Jill,以及一個ProjectManager對象Jack 聚合、組合
Designer、ProjectManager、Programmer都是分別擴展自Person對象的新對象 繼承
我們可以隨時調用Bob、Jill和Jack這三個對象各自的talk方法,他們都可以正常工作,盡管這些方法會產生不同的結果(如Bob可能談的更多的是代碼性能,Jill更傾向于談代碼的優雅性,而Jack強調的是最后期限)??傊?,每個對象都可以重新自定義他們的繼承方法talk 多態、方法覆寫

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
午夜精品久久久久久久99热| 国产精品免费视频xxxx| 日韩电影中文字幕av| 国产精品一区二区久久久| 欧美性在线视频| 欧美成人精品h版在线观看| 最新中文字幕亚洲| 国产亚洲日本欧美韩国| 91po在线观看91精品国产性色| 中文字幕9999| 国产日韩欧美在线视频观看| 国产精品永久免费在线| 国产精品国产三级国产aⅴ9色| 国产精品高潮呻吟视频| 欧美激情国产日韩精品一区18| 一区二区在线视频| 亚洲美腿欧美激情另类| 亚洲自拍偷拍色片视频| 日韩欧美国产成人| 亚洲成人a**站| 一本一道久久a久久精品逆3p| www.久久撸.com| 久久天天躁狠狠躁夜夜爽蜜月| 日韩高清不卡av| 久热精品在线视频| 日韩中文在线中文网三级| 岛国av午夜精品| 91超碰中文字幕久久精品| 欧美日本在线视频中文字字幕| 久久精品福利视频| 成人免费视频在线观看超级碰| 国产精品久久视频| 色综合视频一区中文字幕| 奇米4444一区二区三区| 欧洲成人免费视频| 亚洲国产高清高潮精品美女| 97免费视频在线| 亚洲精品国精品久久99热一| 久久伊人精品一区二区三区| 欧美日韩裸体免费视频| 精品国产一区二区三区久久狼黑人| 日韩va亚洲va欧洲va国产| 正在播放亚洲1区| 国产欧美精品xxxx另类| 亚洲第一网站免费视频| 日韩精品中文字幕久久臀| 久久精品国产精品| 欧美成人激情在线| 欧美日韩国产区| 国产精品免费久久久久影院| 亚洲第一中文字幕在线观看| 韩日欧美一区二区| 国产日韩精品在线| 中文字幕亚洲一区在线观看| 亚洲国产精品久久精品怡红院| 精品久久久一区| 国产欧美欧洲在线观看| 欧美久久精品午夜青青大伊人| 一区二区亚洲精品国产| 久久九九精品99国产精品| 精品高清美女精品国产区| 国产精品久久久久久亚洲调教| 欧美精品一区二区免费| 亚洲女人天堂av| 色婷婷综合久久久久中文字幕1| 午夜精品美女自拍福到在线| 91人成网站www| 26uuu日韩精品一区二区| 亚洲3p在线观看| 成人国产在线激情| 一区二区三区美女xx视频| 日韩在线资源网| 亚洲自拍av在线| 国产精品入口日韩视频大尺度| 国产精品视频1区| 日韩欧美中文第一页| 欧美在线播放视频| 国产精品jvid在线观看蜜臀| xxx成人少妇69| 日本欧美精品在线| 亚洲国产日韩欧美在线图片| 97成人精品区在线播放| 亚洲国产私拍精品国模在线观看| 亚洲精品黄网在线观看| 亚洲高清久久网| 欧美日韩中文字幕日韩欧美| 综合国产在线观看| 欧美大肥婆大肥bbbbb| 中文字幕自拍vr一区二区三区| 美女视频久久黄| 久久亚洲精品毛片| 国产激情久久久久| 国产日韩欧美在线| 中文字幕自拍vr一区二区三区| 久热精品视频在线观看| 蜜臀久久99精品久久久无需会员| 日韩av三级在线观看| 国内精品400部情侣激情| 国产成人精品在线| 成人黄色免费片| 日韩精品在线视频| 亚洲精品国产精品国自产观看浪潮| 国内精品免费午夜毛片| 欧美电影电视剧在线观看| 亚洲国产精品成人va在线观看| 成人精品视频99在线观看免费| 一本大道香蕉久在线播放29| 欧美日韩中文字幕综合视频| 日韩视频免费看| 国产精品久久久久久久久久ktv| 色777狠狠综合秋免鲁丝| 久久在精品线影院精品国产| 亚洲欧美国产日韩天堂区| 欧美亚洲成人网| 日韩电影中文字幕一区| 午夜欧美不卡精品aaaaa| 91国内免费在线视频| 国产91免费看片| 亚洲午夜性刺激影院| 久久久久这里只有精品| 欧美中文在线免费| 不卡av在线网站| 中文字幕日韩av电影| 尤物99国产成人精品视频| 国内精品视频一区| 色在人av网站天堂精品| 精品高清美女精品国产区| 国产精品久久av| 亚洲欧洲一区二区三区在线观看| 一本一本久久a久久精品综合小说| 久久精品青青大伊人av| 精品成人在线视频| 日韩在线观看免费| 国产精品久久久久aaaa九色| 久久99视频免费| 亚洲人成电影网站色…| 欧美精品电影免费在线观看| 亚洲精品乱码久久久久久按摩观| 一道本无吗dⅴd在线播放一区| 国产精选久久久久久| 色婷婷av一区二区三区在线观看| 91久久精品在线| 在线丨暗呦小u女国产精品| 亚洲欧美一区二区精品久久久| 国产亚洲欧美aaaa| 亚洲第一页自拍| 国产精品视频在线播放| 日韩精品久久久久| 亚洲欧洲在线播放| 日韩亚洲一区二区| 亚洲成色777777女色窝| 亚洲成人中文字幕| 色狠狠久久aa北条麻妃| 亚洲片在线观看| 丝袜情趣国产精品| 97精品视频在线| 久久久精品久久久| 久久中文字幕在线视频| 亚洲欧美综合另类中字| 91免费视频网站| 色综合五月天导航| 日韩av大片在线| 国产精品入口免费视| 国产成+人+综合+亚洲欧洲|