最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊

JS中面向?qū)ο蠼榻B

2020-05-15 15:26 作者:MagnumHou  | 我要投稿

一、面向?qū)ο缶幊?/h1>

1.1 面向?qū)ο蟾攀?/h1>

要理解面向?qū)ο?,就要理解什么?面向過程。

面向過程注重的是解決問題的步驟,利用函數(shù)去實(shí)現(xiàn)每一步過程,沒有類和對象的概念,常見的面向過程的語言 C 語言。

面向?qū)ο笞⒅厥褂脤ο笕ソ鉀Q某一個(gè)問題,具有類和對象的概念。類是抽象的,注重的是一類的東西,比如說人類、鳥類、貓科等等,從這些類中拿到具體的對象,對象就是一個(gè)比較明確的個(gè)體,利用這個(gè)對象去解決針對性的問題。面向?qū)ο笳Z言目前比較流行,像 Java、C++、PHP、Python等等。

也就是面向過程需要調(diào)用著去實(shí)現(xiàn)各種功能函數(shù),然后調(diào)用這些函數(shù);而面向?qū)ο?,是將一些功能方法在對象中?shí)現(xiàn),調(diào)用者只需要調(diào)用這個(gè)對象,而不需要了解對象中的功能實(shí)現(xiàn)的具體細(xì)節(jié)。

如:前面學(xué)過內(nèi)置對象 數(shù)組Array ?字符串String ? 算術(shù)Math ? 正則RegExp等等,對象中內(nèi)置了很多的方法,我們在使用的時(shí)候,只需要根據(jù)對應(yīng)的功能去調(diào)用這些方法即可,而不需要知道這些方法所實(shí)現(xiàn)的細(xì)節(jié)。

假設(shè):給一個(gè)數(shù)組,進(jìn)行倒敘排序 ?注意不能使用數(shù)組中reverse()方法

這個(gè)時(shí)候,就需要自己封裝函數(shù)實(shí)現(xiàn)倒敘的功能。每個(gè)人去實(shí)現(xiàn)自己這個(gè)倒敘功能時(shí),其中的實(shí)現(xiàn)細(xì)節(jié)是不一樣的,這就是瞄向過程。而如果我們直接調(diào)用數(shù)組對象的reverse()方法,根本不需要管reverse()封裝的細(xì)節(jié),直接拿過來調(diào)用即可,這就是面向?qū)ο蟆?/p>

再舉例:

比方說你是一個(gè)單身狗,回家需要吃飯,吃飯就得做飯,吃上飯的流程:選擇菜市場 --> 挑菜 --> 回家 --> ?摘菜 ?--> 洗菜 --> ?切菜 ?--> ?炒菜 ?--> ?上桌 ?--> ?吃(一個(gè)人) --> ?刷鍋洗碗 ? ?此時(shí),所有的步驟都需要自己去完成,這就是面向過程。

long long ago....,這個(gè)時(shí)候你終于有了對象,再差點(diǎn)有了好基友和閨蜜,這個(gè)時(shí)候兩個(gè)人吃飯,吃飯的流程:你下班在家打游戲,讓你哪個(gè)對象或好基友或閨蜜去菜市場 --> 挑菜 --> 回家 --> ?摘菜 ?--> 洗菜 --> ?切菜 ?--> ?炒菜 ?--> ?上桌 ? ? ? ?上桌之后,吃(兩個(gè)人) ? ?你去刷鍋。此時(shí)整個(gè)操作,除了刷鍋和吃是你自己完成,其它的只是說了一嘴,你去完成其它所有的操作,這個(gè)過程他買什么菜、去哪個(gè)菜市場、怎么切不用管,反正最后能吃上就行。這就是面向?qū)ο?,一些功能交給另外的對象完成。


1.2 面向?qū)ο笕筇匦?/h1>

封裝: 把相關(guān)信息存儲(chǔ)在對象中的能力。

繼承:繼承是面向?qū)ο笳Z言中最顯著的一個(gè)特性。從已有類中派生出新的類,新的類能吸收已有類的屬性和方法,并能夠拓展新的能力。

多態(tài):多種形態(tài),可以通過不同的接口去實(shí)現(xiàn)。


1.3 類和對象

類:具有相同的特性和行為的集合。如:人類的身高、姓名、年齡等屬性,行為如吃飯、睡覺、學(xué)習(xí)等行為。人類具有這些行為特征,但是又不能具體說這些行為特征的詳細(xì)信息。所以,類是抽象的。

對象:從類中,拿出來的具體的個(gè)體,如:張三、身高180、23歲等屬性,愛吃煎餅果子、睡覺愛打人、喜歡學(xué)箜篌等行為。這些描述就比較具體了。所以說,對象是具體的。


在傳統(tǒng)的JS中(一般指ES3.1),不存在類的概念,但是可以通過構(gòu)造函數(shù)模擬類。所以我們稱其為基于對象的類編程語言。


1.4 體會(huì)面向過程和面向?qū)ο?/h1>

假設(shè)描述一個(gè)人:這個(gè)人的名字叫張三、年齡23、性別男、愛吃 魚香肉絲

面向過程:
面向?qū)ο?/figcaption>

1.5 JS中對象的分類

內(nèi)置對象:Array ? ?String ? ?Math ? RegExp ? Date

宿主對象:提供js運(yùn)行環(huán)境的對象,目前指的是瀏覽器對象

自定義對象:大括號包裹的名值對 key-value



二、創(chuàng)建對象

2.1 原始方式

假設(shè)我們將貓科類的動(dòng)物看作是一個(gè)對象,有貓科動(dòng)物的品種、動(dòng)齡,生活習(xí)性:

貓科類

基于這個(gè)原型對象去創(chuàng)建具體的個(gè)體,這個(gè)原型可以看作模擬類,基于這個(gè)模擬類創(chuàng)建對象如下:

基于模型創(chuàng)建對象


這種利用原型的方式創(chuàng)建對象有兩個(gè)問題:
1. 上面三個(gè)獨(dú)立的個(gè)體,程序不能識別出具體的個(gè)體(實(shí)例的對象)與原型(模擬類)之間的關(guān)系;
2. 書寫的代碼太冗余,每次基于原型去創(chuàng)建一個(gè)新的實(shí)例個(gè)體時(shí),都要重復(fù)的去書寫原型中那些屬性和方法。


2.2 ?利用工廠函數(shù)進(jìn)行改進(jìn)

工廠函數(shù)創(chuàng)建對象

利用工廠函數(shù),解決了代碼冗余的問題。但是還是不能看出對象和原型之間的關(guān)系。
利用關(guān)鍵字obj instanceof Fn 或者利用 consstructor 查看構(gòu)造函數(shù)


2.3 利用構(gòu)造函數(shù)再次優(yōu)化

構(gòu)造函數(shù)和普通函數(shù)最明顯的區(qū)別:構(gòu)造函數(shù)首字母大寫。利用使用this關(guān)鍵字,this指向?qū)嵗瘜ο蟆?/p>

構(gòu)造函數(shù)在實(shí)例化對象時(shí),需要用到new關(guān)鍵字,語法 ?new 構(gòu)造函數(shù)()

構(gòu)造函數(shù)創(chuàng)建對象


構(gòu)造函數(shù)的方式,解決了代碼冗余的問題,也能確認(rèn)出實(shí)例和原型之間的關(guān)系。
但是,也存在一定需要優(yōu)化的問題,見原型優(yōu)化。

如果構(gòu)造函數(shù)中,僅使用return,那么它還是作為一個(gè)普通函數(shù)存在的。

當(dāng)然,如果有this和return都共存的情況下,不同的數(shù)據(jù)類型,函數(shù)最終的處理結(jié)果不同。如果return返回的是一個(gè)基本數(shù)據(jù)類型的數(shù)據(jù),則忽略。如果返回的是一個(gè)引用數(shù)據(jù)類型的數(shù)據(jù),那么函數(shù)無論怎么調(diào)用,返回的都是這個(gè)引用數(shù)據(jù)類型的數(shù)據(jù)。


2.4 原型優(yōu)化

假設(shè)有如下構(gòu)造函數(shù):

構(gòu)造函數(shù)

上面每創(chuàng)建一個(gè)實(shí)例對象,都會(huì)重復(fù)創(chuàng)建des、sayHi、sayHello,它們所實(shí)現(xiàn)或獲取的值都是一樣的。這樣重復(fù)創(chuàng)建會(huì)占用過多的內(nèi)存,為了優(yōu)化,我們開辟一個(gè)獨(dú)立空間,作為其調(diào)用的地址。這樣可以節(jié)約內(nèi)存,利用的就是prototype這個(gè)原型。

原型優(yōu)化


練習(xí):請嘗試著使用面向?qū)ο缶幊痰姆绞剑瓿? 小球在頁面中隨機(jī)滾動(dòng)的案例

JS中面向?qū)ο蠼榻B的評論 (共 條)

分享到微博請遵守國家法律
德惠市| 贺兰县| 托克逊县| 孝昌县| 常德市| 从江县| 漳浦县| 茶陵县| 山东省| 怀柔区| 扎赉特旗| 汶上县| 邵武市| 东兴市| 四会市| 龙岩市| 平塘县| 勃利县| 延安市| 颍上县| 定日县| 安化县| 北流市| 米林县| 丹阳市| 日照市| 卓尼县| 南和县| 三明市| 徐水县| 清流县| 八宿县| 定南县| 平山县| 灵石县| 顺昌县| 孟连| 本溪| 莒南县| 湘乡市| 深水埗区|