物件導向的程式設計 step 4 繼承》

2022-01-22 01:11:40 字數 2786 閱讀 4695

下面來看一下物件繼承都有哪些方式:

原型鏈式繼承:

原型鏈是物件導向中最常見最簡單的,所謂原型鏈就是用父類例項來充當子類原型的物件

直接走栗子:

function father()

function child(){}

child.prototype = new father();

let child = new child();

console.log(child.ainfo) // ["蘇日儷格", "web前端開發"]

child.ainfo.push(24);

console.log(child.ainfo) // ["蘇日儷格", "web前端開發", 24]

let child2 = new child();

console.log(child2.ainfo) // ["蘇日儷格", "web前端開發", 24]

優點:簡單易懂

缺點:由於這種原型鏈式繼承例項之前共享了屬性,所以在修改屬性值的時候是存在引用的;還有個問題就是在建立例項的時候,無法給父型別建構函式中傳遞引數,因此一般不單獨用原型鏈

這個時候物件導向的老闆娘來了,笑著對大佬說了一句,想加薪不,想的話就加一下班處理一下,於是乎大佬們研究出了借用建構函式的繼承方式 ↓↓↓

借用建構函式:

function father()

function child()

child.prototype = new father();

let child = new child();

console.log(child.ainfo) // ["蘇日儷格", "web前端開發"]

child.ainfo.push(24);

console.log(child.ainfo) // ["蘇日儷格", "web前端開發", 24]

let child2 = new child();

console.log(child2.ainfo) // ["蘇日儷格", "web前端開發"]

function father(name)

function child(age)

child.prototype = new father();

let child = new child(24);

console.log(child.ainfo) // ["蘇日儷格", "web前端開發"]

console.log(child.age) // 24

優點:解決了原型鏈式存在的問題

缺點:**復用性差,函式復用沒辦法解決,如果子型別建構函式過多,會導致記憶體洩漏的問題,因此這種方式也很少單獨使用

這個時候物件導向的老闆娘她又來了,面帶不太自然的微笑剛準備開口說話,大佬說我加一下班處理一下,於是乎大佬們又研究出了組合繼承的繼承方式 ↓↓↓

組合繼承

這就和建立物件時候使用的混合模式其實是乙個道理,就是將原型鏈和借用建構函式結合,發揮二者的優點取長補短,實現共享方法不共享屬性

function person(name)

person.prototype.show = function();

function child(name, age)

child.prototype = new person();

child.prototype.constructor = child;

child.prototype.showage = function();

let child1 = new child(['蘇日儷格', 'web前端開發'], 24);

child1.show(); // ["蘇日儷格", "web前端開發"]

child1.ainfo.push('男');

child1.show(); // ["蘇日儷格", "web前端開發", "男"]

child1.showage(); // 24

let child2 = new child(['趙雲', '救阿斗'], 27);

child2.show(); // ["趙雲", "救阿斗"]

child2.showage(); // 27

優點:融合二者優點於一身,也是最常用的一種繼承方式

缺點:雖然是最常用的一種繼承方式,但是也有一丟丟瑕疵,就是無論什麼情況下,都會呼叫兩次超型別建構函式,在第一次call的時候,把父型別的例項屬性拷貝了乙份給子類例項屬性,而這個屬性根本就是活著浪費空氣死了浪費土地型的,因此導致的原型引用屬性在例項間共享;不過到這裡,其實能感覺到就是乙個小瑕疵,所以一般碼農門也不會考慮它,畢竟相對於這一丁點劣勢還是值得的。

這個時候物件導向的老闆娘她還是來了,陰險的笑容馬上就漏出來了,於是大佬們冷靜的喝了一杯茶,回過頭還是研究出了最佳的繼承方式,就是寄生組合式繼承法,這個方法也是目前的終極版了,各種優點體現的淋漓盡致,但是也有乙個缺點就是理解起來程式設計的過程中有些複雜,別問我,因為我不想加薪(』ー』),所以就沒看,想看的自己去問度娘吧(~ ̄▽ ̄)~

等一下( •́ .̫ •̀ ),我還有最後一句話:

我愛你,

願你在被打擊時,

記起你的珍貴,

抵抗惡意,

願你在迷茫時,

堅信你的珍貴,

愛你所愛,

行你所行,

聽從你心,

無問西東,

再見...

物件導向程式設計 繼承

繼承是物件導向程式設計的主要特點之一。繼承,顧名思義就是子繼承父的所有。在面向程式設計中繼承的意思並沒變,子類繼承父類所擁有的屬性 方法。使用extends關鍵字使子類繼承父類,子類就可以自動復用父類的方法了 私有方法除外 並且繼承了父類的所有屬性。在子類例項化過程中子類的構造方法一定會去呼叫父類的...

物件導向程式設計 繼承

一 簡介 1 繼承是軟體復用的一種方式,通過繼承,可以吸收現有類的資料和行為來建立新類,並增添新的效能增類。2 派生類顯示繼承的基類稱為直接基類,經兩級或者多級類層次繼承的類稱為間接基類。3 繼承的方式 public private protected 4 派生類一般不能直接訪問基類的private...

vue 乙個簡單的專案 之零 step 4

多頁應用 與 單頁應用 多頁面應用 每次頁面跳轉,後端都會返回新的html檔案。優點 首屏 首個被展示的頁面 時間快seo 搜尋引擎優化 效果好。缺點 頁面切換慢。單頁面應用 每次頁面跳轉,是前端根據url 變化,進行頁面的重新渲染。優點 頁面切換快,缺點 首屏時間慢,seo 因為搜尋引擎只能識別h...