寄生繼承詳解

2022-07-17 01:45:11 字數 887 閱讀 8450

//將原型繼承和非原型繼承組合為一體的繼承方式叫做組合繼承,但是這種方法的繼承是有一點小缺陷的,下級函式繼承了無用的屬性,所以我們有了寄生繼承來解決汙染問題;

//建立上級建構函式-食物

functionfood(name, hot, taste)

//為了清楚的注釋過程,我們分開寫上級建構函式的原型方法-變質

food.prototype.bad = function();

//建立下級建構函式-麵包

functionbread(name, hot, taste, brand)

//建立乙個空的函式

var fn = function(){};

//將空函式原型替換為上層函式的原型,這樣的空函式沒有了私有屬性,而且原型吃的還是人家的是不是和寄生蟲一樣呢?

fn.prototype =food.prototype;

//使用空函式例項賦值給下級函式原型,這樣有回到了我們的原型繼承,這次繼承的是fn的原型,很乾淨

bread.prototype = newfn();

//當然還原constructor還是必須的,但是這裡不能寫 read.constructor = bread 因為bread.constructor是 function () {};

bread.prototype.constructor =bread;

//下面建立下級函式自己的原型方法,值得注意的是擴充套件自身原型之前完成繼承,不然會有覆蓋問題

bread.prototype.dry = function()

//下面我們可以有下級元素建立例項測試了

var bread = new bread("髒髒包", "1000k", "sweet", "golden phinex");

寄生式繼承

寄生式繼承是原型繼承密切相關的一種思路,寄生式繼承的思路與寄生建構函式和工廠模式類似,即建立乙個僅用於封裝繼承過程 的函式,該函式在內部以某種方式來增強物件,function object o f.prototype o f.name shalio function createanother or...

寄生組合繼承

核心 通過寄生方式,砍掉父類的例項屬性,這樣,在呼叫兩次父類的構造的時候,就不會初始化兩次例項方法 屬性,避免的組合繼承的缺點 既然要實現繼承定義乙個父類 定義乙個動物類 function animal name super.prototype animal.prototype 例項作為子類的原型 ...

寄生式繼承

寄生式繼承是與原形式繼承緊密相關的一種思路,並且也是由克羅克福德推而廣之的。寄生式繼承的思路與寄生建構函式和工廠模式類似,即建立乙個僅用於封裝繼承過程的函式,該函式在內部以某種方式來增強物件,最後再像真的是他做了所有工作一樣返回物件,以下 示範了寄生式繼承模式 function createanot...