首先我們要知道什麼是類的繼承?
其實就是子類繼承父類中的一些屬性和方法。
在js中實現繼承有多種方式,有原型繼承、call繼承、寄生組合繼承、es6中的類以及繼承等幾種方式。
接下來,我將一一介紹每一種繼承方式。
所謂原型繼承,指的是讓子類的原型指向父類的例項
children.prototype=new
parent();
我們要注意一些細節:一、我們首先讓子類的原型指向父類的例項,再向子類原型上擴充套件方法,但是為了防止提前增加的方法在原型重新指向後,之前在子類原型上增加的方法就沒用了,因為子類原型已經指向新的位址了(父類的例項)。
二、讓子類原型重新指向父類例項,子類原型上原有的constructor就沒有了(因為子類的原型重新指向後,新的原型並不是函式天生自帶的原型,也就沒有原型上天生自帶的屬性constructor了),為了保證建構函式的完整性,我們最好給子類的原型重新手動設定constructor屬性值:children.prototype.constructor = children;
原型繼承的原理
原型繼承,並不是把父類中的屬性和方法copy乙份給子類,而是讓子類的原型和父類原型之間搭建乙個鏈結的橋梁,以後子類(或者子類的例項),可以通過原型鏈的查詢機制,找到父類原型上的方法,從而調取這些方法使用即可。
原型繼承的特徵
子類不僅可以繼承父類原型上的公有屬性和方法,而且父類提供給例項的那些私有的屬性方法,也被子類繼承了(存放在子類原型上,作為子類公有的屬性和方法)
function
parent
() parent.prototype.getx = function
() ;
function
children
() children.prototype = new parent();//=>最好在擴充套件子類原型方法之前完成
children.prototype.constructor = children;
children.prototype.gety = function
() ;
var child = new children();
這裡是關於原型繼承的分析圖
接下來幾篇文章我將介紹call繼承、寄生組合繼承以及es6中的繼承。。
關於js繼承
1.建構函式實現繼承,缺點 無法繼承父類原型鏈上的屬性和方法 父類 function parent1 parent.prototype.say function 子類 function child1 2.原型鏈實現繼承,子類例項化的物件屬性會相互影響 父類 function parent2 子類 f...
JS關於繼承的總結
方法一通過原型鏈 grandfather.prototype.lastname 劉 function grandfather var grandfather newgrandfather father.prototype grandfather function father var father ...
關於js原型繼承
js的每個類都有乙個prototype物件 訪問物件的屬性時,會先訪問到物件自身是否有定義這個屬性 如果沒有定義,就會去訪問物件所屬型別的prototype物件是否有此屬性 原型繼承就是把型別的prototype指向乙個父類的新物件,這樣每派生乙個新類出來都會構造乙個新的父類物件作為原型,這個物件和...