繼承是OO語(yǔ)言中一個(gè)重要的特性和概念渺贤。許多的OO語(yǔ)言中都支持兩種繼承方式:接口繼承和實(shí)現(xiàn)繼承。
ECMAScript只支持實(shí)現(xiàn)繼承脑漫,其實(shí)現(xiàn)繼承主要是靠原型鏈來(lái)實(shí)現(xiàn)秸仙。在PHP語(yǔ)言中,是使用extend來(lái)實(shí)現(xiàn)繼承胜榔。那么我們就先來(lái)講講原型鏈胳喷。
原型鏈的基本思想是利用原型讓一個(gè)引用類(lèi)型繼承另一個(gè)引用類(lèi)型的屬性和方法。
簡(jiǎn)單回顧下構(gòu)造函數(shù)夭织、原型和實(shí)例的關(guān)系:
每個(gè)構(gòu)造函數(shù)都有一個(gè)原型對(duì)象吭露,原型對(duì)象包含一個(gè)指向構(gòu)造函數(shù)的指針(prototype),而實(shí)例則包含一個(gè)指向原型對(duì)象的內(nèi)部指針(__proto__)尊惰。
在JavaScript 中讲竿,每當(dāng)定義一個(gè)對(duì)象(函數(shù))時(shí)候泥兰,對(duì)象中都會(huì)包含一些預(yù)定義的屬性。其中函數(shù)對(duì)象的一個(gè)屬性就是原型對(duì)象 prototype题禀。注:普通對(duì)象沒(méi)有prototype,但有__proto__屬性鞋诗。
原型對(duì)象其實(shí)就是普通對(duì)象(Function.prototype除外,它是函數(shù)對(duì)象,但它很特殊迈嘹,他沒(méi)有prototype屬性(前面說(shuō)道函數(shù)對(duì)象都有prototype屬性))