Js中的繼承

2021-10-08 08:08:37 字數 2898 閱讀 9748

​ 繼承是物件導向技術當中的乙個概念。這種技術使得復用以前的**非常容易,能夠大大縮短開發周期,降低開發費用。

繼承就是子類繼承父類的特徵和行為,使得子類物件(例項)具有父類的屬性和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。

​ 繼承在js中占有非常重要的地位,那麼在js中有很多中繼承的方式,不過每一種繼承方式都有優缺點。下面就列舉幾種繼承的方式。

1.實現繼承首先需要乙個父類,在js中實際上是沒有類的概念,在es6中class雖然很像類,但實際上只是es5上語法糖而已

function

people

(name)

}//原型方法

people.prototype.

eat=

function

(food)

父類的例項作為子類的原型

function

woman()

woman.prototype=

newpeople()

;woman.prototype.name =

'haixia'

;let womanobj =

newwoman()

;

優點:

簡單易於實現,父類的新增的例項與屬性子類都能訪問

缺點:可以在子類中增加例項屬性,如果要新增加原型屬性和方法需要在new 父類建構函式的後面

無法實現多繼承

建立子類例項時,不能向父類建構函式中傳引數

複製父類的例項屬性給子類

function

woman

(name)

let womanobj =

newwoman()

;

優點:

解決了子類建構函式向父類建構函式中傳遞引數

缺點:方法都在建構函式中定義,無法復用

不能繼承原型屬性/方法,只能繼承父類的例項屬性和方法

function

wonman

(name)

let wonmanobj =

newwonman()

;

優點:

不限制呼叫方式

簡單,易實現

缺點:不能多次繼承

呼叫父類建構函式,繼承父類的屬性,通過將父類例項作為子類原型,實現函式復用

function

people

(name,age)

people.prototype.

eat=

function()

function

woman

(name,age)

woman.prototype =

newpeople()

;woman.prototype.constructor = woman;

let wonmanobj =

newwoman

(ren,27)

;wonmanobj.

eat(

);

缺點:

由於呼叫了兩次父類,所以產生了兩份例項

優點:函式可以復用

不存在引用屬性問題

可以繼承屬性和方法,並且可以繼承原型的屬性和方法

通過寄生的方式來修復組合式繼承的不足,完美的實現繼承

//父類

function

people

(name,age)

//父類方法

people.prototype.

eat=

function()

//子類

function

woman

(name,age)

//繼承父類方法

(function()

; super.prototype = people.prototype;

//父類的例項作為子類的原型

woman.prototype =

newsuper()

;})(

);//修復建構函式指向問題

woman.prototype.constructor = woman;

let womanobj =

newwoman()

;

**量少,易懂

//class 相當於es5中建構函式

//class中定義方法時,前後不能加function,全部定義在class的protopyte屬性中

//class中定義的所有方法是不可列舉的

//class中只能定義方法,不能定義物件,變數等

//class和方法內預設都是嚴格模式

//es5中constructor為隱式屬性

class

people

eat()$

eat food`)}

}//繼承父類

class

woman

extends

people

eat()}

let wonmanobj=

newwoman

('xiaoxiami');

wonmanobj.

eat(

);

es5繼承和es6繼承的區別

es5繼承首先是在子類中建立自己的this指向,最後將方法新增到this中

es6繼承是使用關鍵字先建立父類的例項物件this,最後在子類class中修改this

結束語:

es6中很多**的語法糖,很多方法簡單易用。在瀏覽器相容的情況下,改變原有方式。

雖然現在很多框架都是es6,但對於初學者還是建議多看看es5中實現的原理。

js中的繼承

繼承有兩種方式 介面繼承和實現繼承。介面繼承只繼承方法簽名,而實現繼承則繼承實際的方法。由於函式沒有簽名,在ecmascript中無法實現介面繼承。ecmascript只支援實現繼承,而且實現繼承主要依靠原型鏈來實現。下面介紹幾種js的繼承 原型鏈繼承實現的本質是重寫原型物件,代之以乙個新型別的例項...

JS中的繼承

定義乙個動物類 實現下面的繼承 function animal name animal.prototype.eat function food 1 原型鏈繼承 核心 將父類的例項作為子類的原型 function cat cat.prototype new animal cat.prototype.n...

JS中的繼承

對於乙個從事前端開發的工作者,如果對js中的原型 原型鏈 繼承等這些了解不透徹,說明你還是個初學者哦!下面我們來談談繼承這些事吧 建構函式中有乙個 prototype的指標,指向其原型物件,原型物件中有乙個constructor指標指向建構函式,例項中有乙個 prototype 指標指向原型物件。那...