繼承是物件導向技術當中的乙個概念。這種技術使得復用以前的**非常容易,能夠大大縮短開發周期,降低開發費用。
繼承就是子類繼承父類的特徵和行為,使得子類物件(例項)具有父類的屬性和方法,或子類從父類繼承方法,使得子類具有父類相同的行為。
繼承在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 指標指向原型物件。那...