建構函式間的繼承,如:
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 模...