帶你理解JavaScript的幾種原型繼承方法

其實JavaScript的原型最好的用法就是運用在面向對象編程的繼承中,今天就來給你們講一下,幾種經常使用的原型繼承運用方法。編程

原型繼承

原型繼承:每個構造函數都有prototype原型屬性,經過構造函數建立出來的對象都繼承自該原型屬性。因此能夠經過更改構造函數的原型屬性來實現繼承。瀏覽器

在JavaScript中,繼承的方式有多種,能夠一個對象繼承另外一個對象,也能夠經過原型繼承的方式進行繼承。函數

接下來給你們演示講解一下幾種繼承方式:prototype

1.簡單混入繼承3d

直接遍歷一個對象,將全部的屬性和方法加到另外一對象上。調試

缺點:只能一個對象繼承自另外一個對象,代碼複用過低了。

2.混入式原型繼承cdn

混入式原型繼承其實與上面的方法相似,只不過是將遍歷的對象添加到構造函數的原型上。對象

面向對象思想封裝一個原型繼承

咱們能夠利用面向對象的思想,將面向過程進行封裝。blog

3.替換式原型繼承

替換式原型繼承,在上面已經舉過例子了,其實就是將一個構造函數的原型對象替換成另外一個對象。繼承

以前咱們就說過,這樣作會產生一個問題,就是替換的對象會從新開闢一個新的空間。

替換式原型繼承時的bug

替換原型對象的方式會致使原型的constructor的丟失,constructor屬性是默認原型對象指向構造函數的,就算是替換了默認原型對象,這個屬性依舊是默認原型對象指向構造函數的,因此新的原型對象是沒有這個屬性的。

解決方法:手動關聯一個constructor

4.Object.create()方法實現原型繼承

當咱們想把對象1做爲對象2的原型的時候,就能夠實現對象2繼承對象1。前面咱們瞭解了一個屬性:proto,實例出來的對象能夠經過這個屬性訪問到它的原型,可是這個屬性只適合開發調試時使用,並不能直接去替換原型對象。

因此這裏介紹一個新的方法:Object.create()。

語法:var obj1 = Object.create(原型對象);

示例代碼:讓空對象obj1繼承對象obj的屬性和方法

兼容性:因爲這個屬性是ECMAScript5的時候提出來的,因此存在兼容性問題。

利用瀏覽器的能力檢測,若是存在Object.create則使用,若是不存在的話,就建立構造函數來實現原型繼承。

相關文章
相關標籤/搜索