說(shuō)到繼承,只要學(xué)過(guò)Java的肯定都知道漩符,然而在JavaScript中出現(xiàn)的不是簡(jiǎn)單的繼承兩個(gè)字,而是原型繼承驱还,那么它們是一樣的嗎嗜暴?
“原型”是一種抽象,代表事物表象之下的聯(lián)系议蟆,用簡(jiǎn)單的話來(lái)說(shuō)闷沥,就是原型描述事物與事物之間的相似性。就比如說(shuō)人咐容,人本來(lái)是一個(gè)對(duì)象舆逃,女人也是一共對(duì)象,女人以人為基礎(chǔ)戳粒,但是她有自己的屬性路狮。原型繼承要求你必須有一個(gè)對(duì)象可以作為另一個(gè)對(duì)象的基礎(chǔ),這樣就可以基于已有的對(duì)象創(chuàng)建新的對(duì)象蔚约,同時(shí)還不必因此創(chuàng)建自定義類型奄妨,看下面這個(gè)函數(shù):
function object(o){
function F(){}
F.prototype = o;
return new F();
}
在object()函數(shù)內(nèi)部,先創(chuàng)建了一個(gè)臨時(shí)性的構(gòu)造函數(shù)苹祟,然后將傳入的對(duì)象作為這個(gè)構(gòu)造函數(shù)的原型砸抛,最后返回了這個(gè)臨時(shí)類型的一個(gè)新的實(shí)例,那么繼續(xù)看下面的:
let person = {
name : "Tom",
friends : ["Sam","Coco"]
};
let anotherPerson = object(person);
anotherPerson.name = "Jack";
anotherPerson.friends.push("Bob");
alert(person.friends); // "Sam , Coco , Bob"
這個(gè)例子說(shuō)明將person作為原型苔咪,所以它的原型中就包含一個(gè)基本類型值和一個(gè)引用類型值屬性锰悼,這意味著person.friends不僅屬于person所有,而且會(huì)被anotherPerson共享团赏。
所以箕般,原型可以通過(guò)描述兩個(gè)事物之間的相似關(guān)系來(lái)復(fù)用代碼,我們可以把這種復(fù)用代碼的模式稱為原型繼承舔清。