JavaScript繼承的多種方式

2021-09-01 11:41:16 字數 2352 閱讀 6999

1.原型鏈繼承

function

a(firstname)

a.prototype.

getfirstname

=function()

function

b(lastname)

b.prototype=

newa

("遠");

b.prototype.

getlastname

=function()

var person=

newb

("方");

person.

getfirstname()

;person.

getlastname()

;

缺點:由於所有的引用型別的原型的屬性會被所有例項共享,所以沒有辦法在不影響所有物件例項的情況下,給父型別的建構函式傳遞引數。

2.借用建構函式繼承

function

a(firstname)

function

b(lastname)

var person=

newb

("方");

console.

log(person.firstname)

;console.

log(person.lastname)

;

缺點:父類的方法會被建立多次

3.組合繼承(原型鏈和借用建構函式組合)

function

a(firstname)

a.prototype.

getfirstname

=function()

function

b(firstname,lastname)

b.prototype=

newa()

;a.prototype.constructor=b;

b.prototype.

getlastname

=function()

var person=

newb

("遠"

,"方");

person.

getfirstname()

;person.

getlastname()

;

組合繼承的缺點:父類的構造器被呼叫了兩次

4.寄生式繼承

function

a(original)

return clone;

}var person=

;varb=

a(person);b

.getname()

;

5.寄生組合式繼承

function

object

(o)f

.prototype=o;

return

newf()

;}function

inheritprototype(b

,a)function

a(firstname)

a.prototype.

getfirstname

=function()

function

b(firstname,lastname)

inheritprototype(b

,a);

b.prototype.

getlastname

=function()

var person=

newb

("遠"

,"方");

person.

getfirstname()

;person.

getlastname()

;

6.class繼承

class

aprint()

}class

bextendsam

()}let num=

newb(1

,2,3

);num.m(

);//1console.

log(num instanceofa)

;//true

console.

log(num instanceofb)

;//true

super()方法在這裡相當於a.prototype.constructor.call(this);

作為函式時,super()只能在子類的建構函式之中,用在其他地方就會報錯

super作為物件時,在普通方法中指向父類的原型物件,在靜態方法中指向父類。

繼承的多種方式

常用的繼承方法 1.原生繼承 抽取共同點 人類 function people name,age,people.prototype.say function people.prototype.breath function 學生類 function student name,age,studentn...

JavaScript 繼承 組合繼承

繼承 組合繼承 組合繼承也叫做偽經典繼承,指的是將原型鏈和借用建構函式的技術組合到一塊,從而發揮二者之長的一種繼承模式。組合繼承的基本思路是使用原型鏈實現對原型屬性和和方法的繼承,而通過借用建構函式來實現對例項屬性的繼承。組合繼承通過在原型上定義方法實現了函式復用,又能夠保證每個例項都有它自己的屬性...

C 的多種繼承方式

繼承的意義在於 可以復用,在原有的基礎上新增新功能就變成了新一代產品了 就像移動 發展史一樣,從大哥大到現在的智慧型手機,代代相傳添磚加瓦,單車變摩托,平房變別墅。究其本質是不變的 繼承也是為了多型服務的。class的繼承分為單繼承,多繼承,菱形繼承,虛擬繼承,菱形虛擬繼承。單繼承 單繼承就是子類d...