淺話javascript的繼承

來源:互聯網
上載者:User

標籤:尋找   his   prototype   通過   理解   alt   javascrip   nbsp   cti   

javascript的繼承和java或C#的繼承是不一樣的,後者是基於類的繼承,而javascript是通過原型來繼承的。所以,先得理一理原型是個什麼鬼。

 

當一個函數對象被建立時,Function構造器產生的函數對象會運行類似這樣一些代碼:this.prototype={constructor:this},新對象被賦予prototype這樣一個屬性,它的值是一個包含constructor屬性的對象。可以看出,這個constructor指向新對象本身。prototype屬性指向的對象自然不會只有constructor一個屬性,也可以擴充屬性。下面我畫了個圖來展現可能更明顯。foo是個函數對象。

 

每個函數function被建立的時候都有一個prototype屬性,即原型。這裡還要引入一個隱式原型的概念,每個對象都有這麼一個屬性__proto__。一般對象本質都是有Object函數建立,因此obj.__proto__===Object.prototype,自訂的函數的prototype本質上就var obj={}一樣,由Object函數建立的,所有它的__proto__指向Object.prototype,再來張圖:

 

Object.prototype是一個特列,它的__proto__指向null。

現在回過來講繼承,js訪問一個對象的屬性時,先在基本屬性中尋找,如果沒有就沿著__proto__這條鏈向上找,這就是原型鏈。所有的對象的原型鏈都會找到Object.prototype,因此,所有的對象都會有Object.prototype的方法。這就是js基於原型鏈的繼承。

 

這個是參考別人的部落格,覺得寫的不錯,自己就按照理解再分析了一遍。至少理解了個大概了~~

 

淺話javascript的繼承

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.