先看下什麼是原型繼承
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...