借用建構函式實現繼承

2022-07-16 08:00:15 字數 938 閱讀 5879

// 在子型別建構函式的內部呼叫超型別的建構函式

function supertype()

function subtype()

var instance1=new subtype();

instance1.colors.push("yellow");

console.log(instance1.colors);

var instance2=new subtype(); // ["red", "blue", "green", "yellow"]

1.傳遞引數

// 相對於原型鏈而言,借用建構函式有很大的優勢,即可以在子型別建構函式中向超型別建構函式傳遞引數

// 看下面的例子

function supertype(name)

function subtype()

var instance1=new subtype();

console.log(instance1.name); // summer

console.log(instance1.age); // 20

// 在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 newsubtype instance1.colors.push black console.log instance1.colors red blue green black var instanc...

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

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