今天,我來(lái)跟大家說(shuō)一下面向?qū)ο筮@一章,首先纠永,先來(lái)了解一下什么是面向?qū)ο螅?/p>
其實(shí)屯伞,簡(jiǎn)潔的來(lái)說(shuō)盐欺,面向?qū)ο缶褪悄M人類認(rèn)知世界的能力。
它分為類和對(duì)象,類------指的是抽象的概念(模板);對(duì)象-------實(shí)例(實(shí)實(shí)在在的案例)或颊。
面向?qū)ο蟮恼Z(yǔ)言特征如下:
1.封裝: ???封裝----js的原型(prototype)
-------將屬性寫(xiě)在構(gòu)造函數(shù)中砸紊,將方法寫(xiě)在原型中。
什么是原型囱挑?
--------原型就是JS中非常特殊的對(duì)象醉顽,當(dāng)函數(shù)創(chuàng)建之后,會(huì)隨之產(chǎn)生一個(gè)原型對(duì)象平挑,當(dāng)通過(guò)這個(gè)函數(shù)的構(gòu)造函數(shù)創(chuàng)建了一個(gè)具體的對(duì)象之后游添,在這個(gè)具體的對(duì)象中就會(huì)有一個(gè)屬性指向原型。
下面給大家舉個(gè)實(shí)例就明白了:
例如通熄,如下代碼:
對(duì)原型的基本知識(shí)到這里也就差不多了唆涝,只有對(duì)上面的圖和代碼能夠很好的理解,那么你對(duì)原型的理解也就沒(méi)有問(wèn)題了棠隐。?
在上述的寫(xiě)法中,我們已經(jīng)解決了大量的問(wèn)題檐嚣,使用原型助泽。但是如果我們的對(duì)象中存在大量的屬性或方法的時(shí)候,使用上面的方式嚎京,會(huì)產(chǎn)生代碼的冗余嗡贺,感覺(jué)不是很好,那么我們可以使用json的方式來(lái)寫(xiě):
但是鞍帝,上述這種寫(xiě)法诫睬,我們是將該對(duì)象的原型覆蓋,如果不太理解的話帕涌,可以給大家看一下原型圖摄凡,如下:
因?yàn)樵椭貙?xiě),需要根據(jù)原型的原理圖來(lái)理解蚓曼,原型的知識(shí)也就這些了亲澡。
但是,因?yàn)樵偷拇嬖谌野妫覀儗?shí)現(xiàn)了對(duì)象的封裝床绪,但是這種封裝同樣也存在問(wèn)題。那么為了解決原型所帶來(lái)的問(wèn)題其弊,需要通過(guò)組合構(gòu)造函數(shù)和原型來(lái)實(shí)現(xiàn)對(duì)象的創(chuàng)建癞己,也就是我們所說(shuō)的終極方案------基于組合的對(duì)象定義。
基于組合的對(duì)象定義:就是將屬性寫(xiě)在構(gòu)造函數(shù)中梭伐,將方法寫(xiě)在原型中痹雅。這種方案有效的集合了兩者的優(yōu)點(diǎn),是目前最為常用的一種方式糊识。
代碼如下:
以上 就是JavaScript中面向?qū)ο蟮姆庋b练慕,將屬性和方法封裝到所對(duì)應(yīng)的對(duì)象中惰匙,其他對(duì)象無(wú)法得到和訪問(wèn)。
2.繼承:
說(shuō)道繼承铃将,首先项鬼,我們來(lái)了解一下什么是繼承?
繼承劲阎,望名而知意绘盟,就是我們現(xiàn)實(shí)社會(huì)中的子孫后代繼承了父輩的財(cái)富,我們一直再說(shuō)悯仙,面向?qū)ο蟮恼Z(yǔ)言就是在模擬現(xiàn)實(shí)世界龄毡,通過(guò)模擬現(xiàn)實(shí)世界來(lái)編程,那么在JavaScript中锡垄,如何理解繼承沦零,如何實(shí)現(xiàn)繼承呢?
首先货岭,讓我們來(lái)了解一下通過(guò)原形鏈來(lái)實(shí)現(xiàn)繼承路操。
要注意的是:JavaScript中存在重寫(xiě),但是沒(méi)有重載千贯。
原形鏈中存在很多缺陷屯仗,那么實(shí)現(xiàn)繼承的終極方案------基于組合實(shí)現(xiàn)繼承。
基于組合的繼承就是:屬性的繼承基于偽裝的方式實(shí)現(xiàn)搔谴,而方法的繼承基于原型鏈的方式繼承魁袜。
代碼如下:
這就是我們實(shí)現(xiàn)繼承的終極方案,當(dāng)然在編程界敦第,還存在著其他的繼承方案峰弹,但是使用都比較少,所以在這里就不做講解了芜果,我們發(fā)現(xiàn)不管是封裝還是繼承最終方案都是基于組合垮卓,就是汲取了這種方案的長(zhǎng)處,舍去了其缺點(diǎn)师幕。
3.多態(tài):父類引用指向子類實(shí)例粟按,是一種弱類數(shù)據(jù)類型語(yǔ)言,天生支持多態(tài)霹粥。在這里就不做太多的講解灭将,很少用到的。
好了后控,今天先分享到這里庙曙,明天繼續(xù)為大家送上好的文章。
? ? ? ? ??