在前面的內容中,給你們講解了JavaScript中的原型是什麼,可是其實JavaScript的原型最好的用法就是運用在面向對象編程的繼承中。前端
今天就來只給你們講一下,幾種經常使用的原型繼承運用方法,也方便你們理解記憶。看完能夠點個收藏,時刻複習。編程
原型繼承
原型繼承:每個構造函數都有prototype原型屬性,經過構造函數建立出來的對象都繼承自該原型屬性。因此能夠經過更改構造函數的原型屬性來實現繼承。
在JavaScript中,繼承的方式有多種,能夠一個對象繼承另外一個對象,也能夠經過原型繼承的方式進行繼承。
給你們演示講解一下幾種繼承方式。
一、簡單混入繼承
直接遍歷一個對象,將全部的屬性和方法加到另外一對象上。
缺點:只能一個對象繼承自另外一個對象,代碼複用過低了。
二、混入式原型繼承
混入式原型繼承其實與上面的方法相似,只不過是將遍歷的對象添加到構造函數的原型上。
面向對象思想封裝一個原型繼承
咱們能夠利用面向對象的思想,將面向過程進行封裝。
三、替換式原型繼承
替換式原型繼承,在上面已經舉過例子了,其實就是將一個構造函數的原型對象替換成另外一個對象。
以前咱們就說過,這樣作會產生一個問題,就是替換的對象會從新開闢一個新的空間。
替換式原型繼承時的bug
替換原型對象的方式會致使原型的constructor的丟失,constructor屬性是默認原型對象指向構造函數的,就算是替換了默認原型對象,這個屬性依舊是默認原型對象指向構造函數的,因此新的原型對象是沒有這個屬性的。
解決方法:手動關聯一個constructor屬性
四、Object.create()方法實現原型繼承
當咱們想把對象1做爲對象2的原型的時候,就能夠實現對象2繼承對象1。前面咱們瞭解了一個屬性:__proto__,實例出來的對象能夠經過這個屬性訪問到它的原型,可是這個屬性只適合開發調試時使用,並不能直接去替換原型對象。因此這裏介紹一個新的方法:Object.create()。
語法:
var obj1 = Object.create(原型對象);複製代碼
示例代碼: 讓空對象obj1繼承對象obj的屬性和方法
兼容性:
因爲這個屬性是ECMAScript5的時候提出來的,因此存在兼容性問題。
利用瀏覽器的能力檢測,若是存在Object.create則使用,若是不存在的話,就建立構造函數來實現原型繼承。
好了,今天的講解就到這裏,看完點個贊支持一下吧。
更多前端開發實戰乾貨,歡迎關注公衆號【前端研究所】,天天都有老司機在上面更新哦!瀏覽器