組合寄生繼承和class繼承的區別

2021-10-04 02:57:14 字數 839 閱讀 8162

先看下什麼是原型繼承

function object( o );

f.prototype = o;

return new f();

}var obj =

};var obj2 = object( obj );

console.log( obj2.name, obj.age, obj.show() );

在object中建立乙個函式f,將f的原型指向引數o,並返回f函式的例項,這樣就可以訪問到物件o的所有屬性和方法。缺點:由於是淺轉殖,引用型別的資料共享在不同的例項之間。

es5中新增了乙個函式object.create()來實現原型繼承

var obj = 

var obj2 = object.create(obj);

obj2.fruitlist.push("banana");

var obj3 = object.create(obj);

console.log(obj3.fruitlist)

寄生式繼承

寄生式繼承就是把原型式繼承再次封裝,然後在物件上擴充套件新的方法,再把新物件返回

function createanother(original);

return clone; //返回這個物件

}var person = ;

var anotherperson = createanother(person);

anotherperson.sayhi(); //彈出 hi

組合繼承和寄生式組合繼承

組合繼承綜合了原型鏈和盜用建構函式,解決了原型內引用值共享的問題,以及子類在例項化時不能給父類建構函式傳參的問題。缺點 呼叫了兩次父類建構函式影響效率,而且子類的原型物件上也擁有了不必要也用不上的屬性,即父類建構函式的例項屬性。這樣的話子類的例項物件如果刪除某個屬性,這個屬性仍然可以訪問到,因為它可...

寄生組合繼承

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

js組合繼承與寄生繼承

組合繼承 function parent parent,prototype.eat function function clild name 1 重寫原型物件,覆蓋之前的,需重新指向建構函式,2 第二次執行這個函式,避免了屬性共享 clild.prototype new parent clild.p...