前端學習(十一)建構函式的繼承

2021-08-07 08:55:39 字數 2652 閱讀 1282

建構函式間的繼承,如:

function

animal

()function

pig(color, name)

//想讓pig構造器繼承animal構造器

function

pig(color, name)

var redpig = new pig("red", "zht");

alert(redpig.atr); //動物

二、 prototype模式

使用prototype屬性,指向要繼承的物件的例項。

那麼所有pig的例項都能繼承animal。

pig.prototype = new animal();

pig.prototype

.constructor = pig;

var redpig = new pig("red", "zht");

alert(redpig.atr);

任何乙個prototype物件都有乙個constructor屬性,指向它的建構函式。如果沒有pig.prototype = new animal();這一行,pig.prototype.constructor是指向pig的;加了這一行以後,pig.prototype.constructor指向animal。

所以,

程式設計時務必要遵守

如果替換了prototype物件,如

object.prototype ={};
下一步必然是為新的prototype物件加上constructor屬性,並將這個屬性指回原來的建構函式。

object.prototype.constructor = object;
因為,constructor屬性,預設呼叫prototype物件的constructor屬性

三、 直接繼承prototype

第三種方法是對第二種方法的改進。由於animal物件中,不變的屬性都可以直接寫入prototype。所以,我們也可以讓pig()跳過 animal(),直接繼承animal.prototype。

function animal(){}

animal.prototype

.atr = "動物"

;pig.prototype = animal.prototype

;pig.prototype

.constructor = pig; //錯誤,會把animal的prototy.constructor修改為pig

var redpig = new pig("red", "zht");

alert(redpig.atr);

與前一種方法相比,這樣做的優點是效率比較高(不用執行和建立animal的例項了),比較省記憶體。缺點是 pig.prototype和animal.prototype現在指向了同乙個物件,那麼任何對pig.prototype的修改,都會反映到animal.prototype。

四、 利用空物件作為中介

利用乙個空物件作為中介:

var cons = function

(){};

cons.prototype = animal.prototype;

pig.prototype = new cons();

pig.prototype.constructor = pig;

alert(animal.prototype.construtor);// animal

//f是空物件,所以幾乎不佔記憶體。這時,修改pig的prototype物件,就不會影響到animal的prototype物件

封裝成乙個函式,便於使用:

function

extend

(child, parent) ;

f.prototype = parent.prototype;

child.prototype = new f();

child.prototype.constructor = child;

child.uber = parent.prototype;//意思是為子物件設乙個uber屬性,這個屬性直接指向父物件的prototype屬性。(uber是乙個德語詞,意思是"向上"、"上一層"。)這等於在子物件上開啟一條通道,可以直接呼叫父物件的方法。這一行放在這裡,只是為了實現繼承的完備性,純屬備用性質。

}

這個extend函式,就是yui庫如何實現繼承的方法。

最後一行,意思是為子物件設乙個uber屬性,這個屬性直接指向父物件的prototype屬性。(uber是乙個德語詞,意思是」向上」、」上一層」。)這等於在子物件上開啟一條通道,可以直接呼叫父物件的方法。這一行放在這裡,只是為了實現繼承的完備性,純屬備用性質。

五、 拷貝繼承

把父物件的所有屬性和方法,拷貝進子物件

function

extend

(child, parent)

c.uber = p;

}

建構函式的繼承

在父類中定義了2個建構函式,在子類中,也定義了2個建構函式。當執行子類時,可以發現先呼叫父類的建構函式,在呼叫子類的建構函式。實驗四 建構函式的繼承 實驗內容 在父類中,定義了2個建構函式,在子類中,也定義了2個建構函式。編寫 程式顯示父類 子類建構函式的呼叫過程,在子類中實現建構函式的繼承。pac...

建構函式的繼承

物件之間的 繼承 有五種方法。比如,現在有乙個 動物 物件的建構函式。function animal 還有乙個 貓 物件的建構函式。function cat name,color 怎樣才能使 貓 繼承 動物 呢?一 建構函式繫結 function cat name,color var cat1 ne...

建構函式 繼承

首先給出如下兩個建構函式 function animal function cat name,color 一 建構函式的繫結 function cat name,color var cat11 new cat 11 綠色 console.log cat11.species 二 prototype 模...