繼承方式二 借用建構函式

2021-10-05 08:32:17 字數 1158 閱讀 2426

function

supertype()

function

subtype()

var instance1 =

newsubtype()

; instance1.colors.

push

("black");

console.

log(instance1.colors)

;//["red", "blue", "green", "black"]

var instance2 =

newsubtype()

; console.

log(instance2.colors)

;//["red", "blue", "green"]

1.傳遞引數

相對於原型鏈而言,**借用建構函式有乙個很大的優勢,即可以在子型別建構函式中向超型別建構函式傳遞引數。**看下面的例子:

function

supertype

(name)

function

subtype()

var instance1 =

newsubtype()

; console.

log(instance1.name)

;//川普

console.

log(instance1.age)

;//75

以上**中的supertype只接受了乙個引數name,該引數會直接賦給乙個屬性。在subtype建構函式內部呼叫supertype 建構函式時,實際上是為subtype的例項設定了name屬性。為了確保supertype建構函式不會重寫子型別的屬性,可以在呼叫超型別建構函式後,再新增應該在子型別中定義的屬性。

2.借用建構函式的問題(待驗證)

如果僅僅是借用建構函式,那麼也將無法避免建構函式模式存在的問題--方法都在建構函式中定義,因此函式復用也就無從談起了。而且,在超型別的原型中定義的方法,對子型別而言也是不可見的,結果所有型別都只能使用建構函式模式。

考慮到這個問題,借用建構函式的技術也是很少單獨使用的。

借用構造函式呼叫繼承

function father name,age 這樣直接呼叫,那麼father中的this只的是 window。因為其實這樣呼叫的 window.father 李四 20 name 和age 屬性就新增到了window屬性上 father 李四 20 alert name window.name ...

借用建構函式實現繼承

在子型別建構函式的內部呼叫超型別的建構函式 function supertype function subtype var instance1 new subtype instance1.colors.push yellow console.log instance1.colors var inst...

物件導向(繼承) 借用建構函式02

首先回顧一下原型鏈中引用型別值帶來的問題 function supertype function subtype 繼承了 supertype subtype.prototype new supertype var instance1 new subtype instance1.colors.push...