Js繼承方式及優缺點

2021-08-17 15:07:22 字數 1263 閱讀 1751

作為一門基於物件的語言,js中也可以通過繼承來實現父型別和子型別之間屬性或方法的傳遞,其方式有以下幾種:

1、原型鏈繼承:子型別的原型物件是父型別的例項即subertype.prototype=new supertype();

缺點:子型別繼承了父型別原型中的所有屬性和方法,但是對於引用型別的屬性值,所有例項共享,所以不能在不改變其他例項屬性的情況下改變。

new 操作符的原理是:1、建立乙個新例項物件,該物件的__proto_指向subertype.prototype

2、執行建構函式subertype中的**,且這裡的this為當前例項物件

3、如果建構函式返回的是乙個物件,那麼就返回這個物件,如果不是,就返回第一步中建立的物件

缺點:由於new操作符的原理如上述所說,所以在執行建構函式subertype中就會執行supertype,但是子型別只能擁有父型別在建構函式中定義的屬性或方法,並不能讀取到父型別原型物件中的屬性或方法。只能實現部分繼承。

3、組合繼承:將原型鏈繼承和借用建構函式繼承組合使用,使用原型鏈繼承來繼承共享的方法,使用借用建構函式繼承來繼承例項屬性或方法。

缺點:父型別的建構函式會執行兩次

4、原型式繼承:就是弱化建構函式的概念,是基於乙個已知物件來建立乙個新的物件

function object(o)

fn.prototype=o;

return new fn();

返回乙個__proto_指向o的例項物件。es5中規範為object.create(o,};

缺點:仍然是屬性值為引用型別時,所有例項共享該屬性值。

5、寄生式繼承:與寄生建構函式類似,建立乙個僅用於封裝繼承過程的函式,在這個函式中來處理物件,最後返回這個物件

function inherit(o);

return c;

缺點:寄生式繼承對每個例項都建立乙個sayname方法,無法達到函式復用的效果

6、組合寄生繼承:使用寄生式繼承來實現對原型屬性和方法的繼承,使用借用建構函式來實現對例項屬性和方法的繼承

其中注意:

subertype.prototype=obeject.create(supertype.prototype);//這裡使用寄生式繼承,可以建立乙個中間物件,將中間物件賦給subertype.prototype,這樣再進行下面這句更改constructor的**,就不會改變父型別的原型物件中的constructor,就可以區分例項是由subertype還是supertype建立的。

subertype.prototype.constructor=subertype;

js繼承的幾種方式及優缺點

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

js繼承方式及其優缺點?

原型鏈繼承的缺點 一是字面量重寫原型會中斷關係,使用引用型別的原型,並且子型別還無法給超型別傳遞引數。借用建構函式 類式繼承 借用建構函式雖然解決了剛才兩種問題,但沒有原型,則復用無從談起。所以我們需要原型鏈 借用建構函式的模式,這種模式稱為組合繼承 組合式繼承 組合式繼承是比較常用的一種繼承方法,...

js繼承,原型實現繼承的優缺點及解決方式

function parent function child 2.原型繼承 function human function man man.prototype new human var m new man 此時man.name teacher man.age 39 三,組合繼承 使用原型鏈實現對原...