簡單解析JavaScript中的__proto__屬性,javascript__proto_

來源:互聯網
上載者:User

簡單解析JavaScript中的__proto__屬性,javascript__proto_

JavaScript是一個物件導向語音,即一切皆對象。

那麼怎麼產生對象?在Java的世界裡,對象是由類(Class)執行個體出來的,通俗地說,就是將事物抽象成一個模具,用這個模具(類)生產出一個個具體的實物(對象)。

可是JS中沒有類這個概念,有的是“原型”,對象是由原型衍生出來的。通俗地說,在JS的世界裡,“原型”並不是一個模具,而是一個具體的實物(對象)。所有對象都是由另一個對象衍生出來的,而這個被衍生的對象就是所謂的“原型對象”。

在javascript中有三類對象,1使用者建立的對象,2建構函式的對象,3原型對象

  • 使用者建立的對象,一般意義上使用new語句顯式構造的方法。
  • 建構函式的對象,普通的建構函式,即通過new調用產生普通對象的函數
  • 原型對象,建構函式prototype屬性指向的對象。

這三個對象中每一個類都有一個屬性-__proto__屬性,它們指向該對象的原型,從任何對象沿用它開始遍曆都可以追溯到Object.prototype。

建構函式都有prototype對象,它指向一個原型對象,通過該建構函式建立對象的時候,被建立的對象的__proto__屬性將指向建構函式的prototype屬性。

原型對象有一個constructor屬性,該屬性指向它對應的建構函式。

Talk is cheap, show me the code! 咱們來看看代碼:

var obj = {};console.log(obj);

咱們將__proto__展開看看:是一些預設方法。

你一定會發生這個__proto__對象中也有一個__proto__對象,正如我們剛才說的,每個對象都有一個__proto__屬性指向它的原型對象。我們列印一下這個__proto__中的__proto__:

console.log(obj.__proto__.__proto__); //--> null

結果是null,說明已經到了頂層原型對象。obj是用大括弧{}定義的,obj的原型對象自然是JS的頂層對象。

咱們再看一端代碼,加強下理解:

var parent = {  name : "parent"};var child = {  name : "child",  __proto__ : parent};var subChild = {  name : "subChild",  __proto__ : child}console.log(subChild);

  • subChild.__proto__ --> child
  • child.__proto__ --> parent
  • parent.__proto__ --> 頂層原型對象

聯繫我們

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