下面小編就為大家全面的介紹一下javascript在的繼承。希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
原型式繼承
調(diào)用一個(gè)函數(shù),接收這個(gè)函數(shù)返回來的對(duì)象,這個(gè)對(duì)象的原型就是傳入函數(shù)的參數(shù)對(duì)象。
如:
function personObject(o){
function F(){}
F.prototype = o;
return new F();
}
var person = {
name:"Nicholas",
friends:["Shelby","Court","Van"]
}
var person_one = personObject(person);
從上面的代碼中,我們知道person是person_one的原型。ES5中添加了一個(gè)方法規(guī)范化原型式繼承,這個(gè)方法是Object.create(),這個(gè)方法有兩個(gè)參數(shù),第一個(gè)是作為新對(duì)象原型的對(duì)象,像上面的person,第二個(gè)是為新對(duì)象定義額外屬性的對(duì)象。第二個(gè)參數(shù)可選。
如:
var person_one = Object.create(person, {
name: {
value:"Jon"
}
});
當(dāng)你只想讓一個(gè)對(duì)象與另一個(gè)對(duì)象保持類似時(shí),可以使用原型式繼承。
寄生式繼承
在一個(gè)函數(shù)里實(shí)現(xiàn)一次原型式繼承,然后為接收到的這個(gè)對(duì)象添加自己的屬性與方法。
如:
function createAnother(o){
var person_one = personObject(o);
person_one.sayHi = function(){
alert(" hi ");
}
return person_one;
}
寄生組合式繼承
組合繼承也有其缺點(diǎn),它實(shí)現(xiàn)了兩次屬性繼承,而寄生組合式繼承就避免了這個(gè)問題。實(shí)例通過構(gòu)造函數(shù)繼承了屬性,而原型的方法則是通過寄生式繼承的方式來繼承。
如:
function inherit(subType, superType){
var prototype = Object(superType.prototype);
prototype.constructor = subType;
subType.prototype = prototype;
}
通過調(diào)用上面的函數(shù),實(shí)現(xiàn)subTye.prototype的原型是superType.prototype,完成了原型方法的繼承。
以上這篇javascript關(guān)于繼承解析就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考