JS繼承的幾種方式

2022-09-12 23:57:31 字數 1738 閱讀 6582

js繼承的六種方式

具體實現:

優點:簡單明瞭,直接繼承超類建構函式的屬性和方法

缺點:在子例項中會拷貝父類建構函式中的方法,當子類很多的時候,會增加記憶體的佔用量,並且當例項需要改變方法的時候,之前的例項都無法及時更新,無法繼承原型鏈上的屬性和方法

利用原型鏈來實現繼承,超類的乙個例項作為子類的原型,宣告乙個過渡的函式物件,將傳入的需要繼承的函式賦值給過渡函式的物件

具體實現:

當c訪問b的superspeak屬性的時候,會先在c的例項屬性中查詢,沒有找到,之後到b的原型即a的例項中去找,還是沒有找到,繼續到a的原型物件中找。

優點:例項是子類的例項,實際上也是父類的乙個例項

父類新增原型方法/原型屬性,子類都能訪問到

缺點:所有子類的例項的原型都共享乙個超類例項的屬性和方法,無法實現多繼承

雖然原型上任何型別的屬性值都不會通過例項被重寫,但是引用型別的屬性值可能會受到影響。

比如:

利用構造繼承和原型鏈組合

具體實現:

優點:解決了構造繼承和原型鏈繼承的兩個問題

缺點:實際上子類上會擁有超類的兩個屬性(上圖的第12行和第15行),多占用了一點兒記憶體,只是子類的屬性覆蓋了超類的屬性

採用原型式繼承並不需要定義乙個類,本質上是淺拷貝,以乙個物件為模板複製出新的物件所以引用的資料共享在不同的例項間。

具體實現:

當d修改引用物件時,e的資料也會發生變化。

多用於不構建建構函式,僅僅模擬乙個物件的時候。

優點:直接通過乙個物件生成乙個繼承該物件的物件

缺點:不是類式繼承,而是原型式基礎,缺少了類的概念

建立乙個僅僅用於封裝繼承過程的函式,然後在內部以某種方式增強物件,最後返回物件

具體實現:

優點:把原型式繼承再次封裝,然後在物件上擴充套件新得方法,再把新物件返回

缺點:依舊沒有類的概念

結合寄生式繼承和組合式繼承,完美實現不帶兩份超類屬性的繼承方式

具體實現:

優點:完美實現繼承,解決了組合式繼承帶兩份屬性的問題

缺點:過於繁瑣,因此組合繼承更好一些

哈哈哈,未完待續...

js繼承幾種方式

js作為物件導向的弱型別語言,繼承也是其非常強大的特性之一。那麼如何在js中實現繼承呢?讓我們拭目以待。既然要實現繼承,那麼首先我們得有乙個父類,如下 定義乙個動物類 function animal name 原型方法 animal.prototype.eat function food 核心 將父...

幾種js的繼承方式

1 繼承第一種方式 物件冒充 function super username function sub username var supernew new super super var subnew new sub sub supernew.hello subnew.hello subnew.wo...

js的幾種繼承方式

方式一 原型鏈繼承 function parent parent.prototype.getparentname function 子類 function child 下面這步實現繼承,這步需要放在getchildname 之前,不然獲得子類方法無法使用 child.prototype new pa...