6大繼承知識

2021-10-04 06:23:15 字數 2329 閱讀 9101

原型物件等於另乙個型別的例項,也就是子類的原型是父類的例項

function

supertype

(name)

supertype.prototype.

getsupervalue

=function()

function

subtype()

subtype.prototype =

newsupertype()

subtype.prototype.constructor = subtype

newsubtype

('張三'

)

問題:

父類例項上的屬性成了原型上的屬性

在例項化子類的時候(new subtype('張三')),無法向父類的建構函式傳遞引數(supertype(name)無法傳遞name引數)

function

supertype

(name)

supertype.prototype.

getsupervalue

=function()

function

subtype

(name)

newsubtype

('張三'

)

雖然解決了原型鏈繼承無法傳遞引數的問題,但是也有以下問題

問題:方法都在建構函式中定義,因此函式的復用就無從談起(通常公共的方法會寫在原型上,但是沒有繼承父類原型上的方法,沒法復用)

原型鏈+建構函式

function

supertype

(name)

supertype.prototype.

getsupervalue

=function()

function

subtype

(name)

subtype.prototype =

newsupertype()

subtype.prototype.constructor = subtype

newsubtype

('張三'

)

問題:

最大的問題在於會呼叫兩次父類的建構函式,一次再子類的建構函式中呼叫,一次在建立子類的原型上呼叫,子類的原型會包含父類例項的屬性。

借助原型基於已有的物件建立新物件

function

supertype

(name)

supertype.prototype.

getsupervalue

=function()

function

subtype

(name)

subtype.prototype = object.

create

(supertype.prototype,})

newsubtype

('張三'

)

問題:

只繼承原型而沒有繼承例項

寄生的建構函式以工廠模式類似,用於封裝繼承的過程

function

supertype

(name)

supertype.prototype.

getsupervalue

=function()

function

subtype

(name)

}this

.subproperty =

false;}

newsubtype

('張三'

)

問題:

只繼承例項而沒有繼承原型

借用建構函式+原型式繼承

function

supertype

(name)

supertype.prototype.

getsupervalue

=function()

function

subtype

(name)

supertype.prototype = object.

create

(supertype,})

newsubtype

('張三'

)

C 繼承6 虛繼承 菱形繼承

建立 1.farmer類,資料成員 m strname,成員函式 構造 析構 sow 2.worker類,資料成員 m strcode,成員函式 構造 析構 carry 3.migrantworker類,資料成員 無,成員函式 構造 析構 4.person類,資料成員 m strcolor,成員函式...

6原型繼承

就是讓每個類的prototype屬性指向某個物件 function person function chinese function sichuanren chinese.prototype new person sichuanren.prototype new chinese var sichua...

繼承及ES6繼承

物件導向的三大特點 多型 繼承 封裝 繼承 乙個型別的物件能夠訪問另外乙個型別的屬性和方法 函式 類與類之間的關係 類就是眾多例項共有的屬性和方法的乙個抽象 原型物件中的this指向例項 function person var person newperson person只是乙個例項 consol...