閱讀javaScript 的原型筆記

來源:互聯網
上載者:User

標籤:

下面我們先看一個例子已經一張圖。

function Foo() {}Object.prototype.name = ‘My Object‘;Foo.prototype.name = ‘Bar‘;var obj = new Object();var foo = new Foo();console.log(obj.name); // 輸出 My Objectconsole.log(foo.name); // 輸出 Barconsole.log(foo.__proto__.name); // 輸出 Barconsole.log(foo.__proto__.__proto__.name); // 輸出 My Objectconsole.log(foo. __proto__.constructor.prototype.name); // 輸出 Bar

 

通過對上面原型例子的閱讀與思考,我們可以得出以下結論:

1.通過new關鍵字建立的對象沒有prototype屬性,只有_proto_屬性。
2.通過new出來的對象其_proto_屬性指向被new對象.prototype
3.建構函式有_proto_與prototype屬性。
4.建構函式的prototype屬性指向建構函式.prototype  反過來建構函式.prototype.constructor指向該建構函式。(看圖)
5.只要是建構函式,建構函式._proto_都指向Function.prototype
6.Function與Object他們都是建構函式。
7.Object.prototype是所有對象的祖先,Function.prototype 是所有函數的原

型,包括建構函式。 

以上每個結論都是自己參考文章並概括的,也可能會存在理解上的偏差,總之本人自己感覺這樣可以讓自己能夠大致理解原型大致是一個什麼概念以及對象間的原型關係。

 

補充1:

?建構函式內定義的屬性繼承方式與原型不同,子物件需要顯式調用父物件才能繼承構
造函數內定義的屬性。
? 建構函式內定義的任何屬性,包括函數在內都會被重複建立,同一個建構函式產生的
兩個對象不共用執行個體。
? 建構函式內定義的函數有運行時閉包的開銷,因為建構函式內的局部變數對其中定義
的函數來說也是可見的。

補充2:

? 除非必須用建構函式閉包,否則盡量用原型定義成員函數,因為這樣可以減少開銷。
? 盡量在建構函式內定義一般成員,尤其是對象或數組,因為用原型定義的成員是多個
執行個體共用的。

 

註:參考文章

node.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.