寄生組合繼承

2022-06-01 06:57:06 字數 464 閱讀 9486

核心:通過寄生方式,砍掉父類的例項屬性,這樣,在呼叫兩次父類的構造的時候,就不會初始化兩次例項方法/屬性,避免的組合繼承的缺點

既然要實現繼承定義乙個父類

//定義乙個動物類

function animal(name);

super.prototype=animal.prototype;

//例項作為子類的原型

cat.prototype=new super();

執行

var cat = new cat();

console.log(cat.name);

console.log(cat.sleep());

console.log(cat instanceof animal); // true

console.log(cat instanceof cat); //true

寄生式組合繼承

function box f 這樣直接將原型指向乙個物件,會將原有的constructor覆蓋 box.prototype 因此這裡我們使用定義屬性,重新穿件這個constructor的指向 object.defineproperty box.prototype,constructor functi...

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

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

js組合繼承與寄生繼承

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