繼承有幾種方式,分別是什麼?想要實現繼承可使用什麼方法?

這裏是修真院前端小課堂,每篇分享文從前端

【背景介紹】【知識剖析】【常見問題】【解決方案】【編碼實戰】【擴展思考】【更多討論】【參考文獻】vue

八個方面深度解析前端知識/技能,本篇分享的是:java

【 繼承有幾種方式,分別是什麼?想要實現繼承可使用什麼方法?  】jquery

【修真院xx(職業)小課堂】課題名稱程序員

開場語:web

你們好,我是IT修真院XX分院第X期的學員XX,一枚正直純潔善良的XX程序員,今天給你們分享一下,修真院官網XX(職業)任務X,深度思考中的知識點——XXX編程

(1)背景介紹:網絡

對象:「無序屬性的結合,其屬性值能夠包含基本值、對象或者函數」。框架

面向對象編程(OOP):核心思想是將各類複雜關係,抽象成一個個對象,而後由對象之間的分工合做,完成對真實世界的模擬。函數

在JS中繼承是一個很是複雜的話題,比其餘任何面嚮對象語言中的繼承都複雜得多。在大多數其餘面嚮對象語言中,繼承一個類只需使用一個關鍵字便可。在JS中想要達到繼承公用成員的目的,須要採起一系列措施。

(2)知識剖析:

JavaScript語言的對象體系,不是基於「類」,而是基於構造函數(constructor)和原型(prototype)

原型對象:只要建立一個新函數,就會根據特定的規則爲該函數建立一個prototype屬性指向其原型對象,默認狀況下原型對象會自動得到一個constructor屬性,該屬性包含一個指向prototype屬性所在函數的指針

 

clipboard.png

構造函數:自己是一個函數,出於建立特定類型新對象的目的而定義的,內部使用this變量,須要和new配合使用來建立實例,this變量會綁定在實例對象上。

封裝模式:將「屬性」和「方法」封裝成對象的模式,即建立對象的方式

 

 
clipboard.png

clipboard.png

 

clipboard.png

 

clipboard.png

clipboard.png

 

clipboard.png

 

繼承概念
許多OO語言都支持兩種繼承方式:接口繼承和實現繼承,接口繼承只繼承方法簽名,實現繼承則繼承實際的方法

 

(3)常見問題:

js如何實現繼承?

(4)解決方案:

 

clipboard.png

Cat如何繼承Animal的species屬性

 

 

 

 
clipboard.png

clipboard.png
clipboard.png
d.png](/img/bVbmXji)

![圖片上傳中...]

 

(5)編碼實戰:

現階段中運用比較普遍的是組合式繼承,由於原型鏈和構造函數繼承方式都有相對應的缺點,好比說原型鏈最主要的問題來自包含引用類型值的原型。而構造函數的缺點是不能很好地封裝對象方法。通常狀況下只有對象沒有方法的狀況下才會使用構造函數。而組合式繼承繼承了原型鏈和構造函數的優勢,並完善了兩者的不足。function Fn1(){

this.colors=["red","blue","green"];

}

function Fn2(){

}

Fn2.prototype=new Fn1();//繼承了Fn1()對象

var instance1 = new Fn2();

instance1.colors.push("black");

console.log(instance1.colors);//"red","blue","green","black"

var instance2 = new Fn2();

console.log(instance2.colors);//"red","blue","green","black"

 

(6)拓展思考:

ES6中JavaScript擁有類的概念了,參考java等語言思考JavaScript如何使用類來簡化封裝、繼承。

(7)參考文獻:

參考:阮一峯的網絡日誌

參考:JavaScript高級程序設計

(8)更多討論:

Q1:繼承通常用到什麼地方?

A :一般在通常的項目裏不須要,由於應用簡單,但你要用純js作一些複雜的工具或框架系統就要用到了,好比webgis、或者js框架如jquery、angular、vue什麼的,否則一個幾千行代碼的框架不用繼承得寫幾萬行,甚至還沒法維護。

Q2:如何肯定原型和實例之間的關係? 

A:兩種方法:第一種是使用instanceOf操做符,第二種是使用isPrototypeOf()方法。 

eg:

console.log(person instanceOf Child);//true 

console.log(Child.prototype.isPrototypeOf(instance));//true 

Q3:什麼是淺複製?

A :淺複製是複製引用,複製後的引用都是指向同一個對象的實例,彼此之間的操做會互相影響。

(9)鳴謝:

感謝馮強師兄,此教程是在他們以前技術分享的基礎上完善而成。

(10)結束語:

今天的分享就到這裏啦,歡迎你們點贊、轉發、留言、拍磚

相關文章
相關標籤/搜索