組合繼承也叫偽經典繼承,指將原型鏈的借用建構函式的技術組合到一起,發揮二者之長的一種繼承模式。思路是使用原型鏈實現對原型屬性和方法的繼承,而通過建構函式來實現例項繼承,這樣就既對原型上的方法實現了復用,又能保證每個例項獨特的屬性。
function supertype()
supertype.prototype.sayname=function();
function subtype(name,age)
//繼承方法
subtype.prototype=new supertype();
subtype.prototype.constructor=subtype;
subtype.prototype.sayage=function()
var instance1= new subtype("nick",29);
instance1.color.push("black");
alert(instance1.colors); //"red,blue,green,black"
instance1.sayname(); //"nick"
instance1.sayage(); //29
var instance2= new subtype("greg",27);
alert(instance2.colors); //"red,blue,green"
instance2.sayname(); //"greg"
instance2.sayage(); //27
首先給supertype定義了兩個屬性和在原型鏈上的乙個方法,然後讓subtype繼承name屬性和定義自己的age屬性,其次讓supertype的例項成為subtype的原型,進而繼承supertype的屬性和方法,所以整個繼承下來instance既有自己的屬性包括name,color,age,又有相同的方法sayname和sayage。
js組合繼承與寄生繼承
組合繼承 function parent parent,prototype.eat function function clild name 1 重寫原型物件,覆蓋之前的,需重新指向建構函式,2 第二次執行這個函式,避免了屬性共享 clild.prototype new parent clild.p...
JS繼承 寄生組合式繼承
1,原型式繼承 以乙個已有的物件為原型,創造乙個新的物件 function inheritobject o f.prototype o return new f 2,寄生式繼承 在原型式繼承的基礎上,為新的物件新增新的方法 function createobj proto return o 3,寄生...
JS組合繼承相比原型鏈繼承的優勢
原型繼承 父 建構函式 function father this.name foo this.family jack tom james father.prototype.sayname function console.log this.name father.prototype.sayfamil...