下面來看一下物件繼承都有哪些方式:
原型鏈式繼承:
原型鏈是物件導向中最常見最簡單的,所謂原型鏈就是用父類例項來充當子類原型的物件
直接走栗子:
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...