js原型和原型鏈知識整理

來源:互聯網
上載者:User

標籤:tor   log   類型   執行個體   logs   type   ima   eof   對象   

在清楚了js建立對象和new方法的過程之後,再來看原型的概念就容易理解多了。

原型存在的目的是為了能更加節約記憶體地繼承。

我認為原型中主要需要搞清楚這4個概念,顯式原型指向什麼,隱式原型指向什麼,constructor指向什麼,原型鏈是什麼。

一圖勝千言。下面這張圖就解釋了所有這些概念。

 

 

下面自己總結了一些原型的基本特徵,用於加深理解:

1. 在JS裡,萬物皆對象。方法(Function)是對象,方法的原型(Function.prototype)是對象。因此,它們都會具有對象共有的特點。
即:對象具有屬性__proto__,可稱為隱式原型,一個對象的隱式原型指向構造該對象的建構函式的原型,這也保證了執行個體能夠訪問在建構函式原型中定義的屬性和方法。ES5中有了對於這個內建屬性標準的Get方法Object.getPrototypeOf().

2. 方法(Function)這個特殊的對象,除了和其他對象一樣有上述__proto__屬性之外,還有自己特有的屬性——原型屬性(prototype),這個屬性是一個指標,指向一個對象,這個對象的用途就是包含所有執行個體共用的屬性和方法(我們把這個對象叫做原型對象)。原型對象也有一個屬性,叫做constructor,這個屬性包含了一個指標,指回原建構函式。

3. 所有對象都是由函數建立的。註:{}會比new Object()效率快。

4. 函數對象的隱式原型(__proto__)指向Function.prototype。

5. 函數對象的顯式原型(prototype)的隱式原型(__proto__)指向Object.prototype。

6. 非函數對象的隱式原型(__proto__)指向其建構函式的prototype屬性指向的對象。

7. Object.prototype.__proto__ 指向 null。

8. Function的隱式原型(__proto__)指向Function.prototype,因為Function也是函數對象。


9. 對象都是參考型別,因此顯式原型(prototype)和隱式原型(__proto__)也是參考型別,因此父級(或父級的父級,或更高)建構函式的prototype修改添加屬性時會直接影響到其子級(以及子級和子級,和更低)。

 

 

 參考連結: https://www.zhihu.com/question/34183746/answer/58155878

js原型和原型鏈知識整理

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.