1. 程式人生 > >圖解javascript原型鏈

圖解javascript原型鏈

圖解javascript原型鏈

作者: HerryLo

本文永久有效連結: https://github.com/AttemptWeb......

原型鏈和原型物件是js的核心,js以原型鏈的形式,保證函式或物件中的方法、屬性可以讓向下傳遞,按照面向物件的說法,這就是繼承。而js通過原型鏈才得以實現函式或物件的繼承,那麼下面我們就來聊一聊js中的原型鏈。以下圖居多,請放心食用。

prototype和contructor

prototype指向函式的原型物件,這是一個顯式原型屬性,只有函式才擁有該屬性。contructor指向原型物件的建構函式。

// 可以思考一下的列印結果,它們分別指向誰
function Foo() {}

console.log(Foo.prototype)
console.log(Foo.prototype.contructor)
console.log(Foo.__proto__)
console.log(Foo.prototype.__proto__)

下面來看看各個建構函式與它自己原型物件之間的關係:

proto

每個物件都有_proto_,它是隱式原型屬性,指向了建立該物件的建構函式原型。由於js中是沒有類的概念,而為了實現繼承,通過 _proto_ 將物件和原型聯絡起來組成原型鏈,就可以讓物件訪問到不屬於自己的屬性。

函式和物件之間的關係

Foo、Function和Object都是函式,它們的_proto_都指向Function.prototype

原型物件之間的關係

它們的_proto_都指向了Object.prototype。js原型鏈最終指向的是Object原型物件

_proto_原型鏈圖

相信只要你看懂了上面的圖表,那麼你應該就已經理解了js的原型鏈了。

總結

  • Function 和 Object 是兩個函式。
  • proto 將物件和原型連線起來組成了原型鏈。
  • 所有的函式的 proto 都指向Function原型物件。
  • js的原型鏈最終指向的是Object原型物件(Object.prototype)(在這裡我將null排除在外了)。

ps: 微信公眾號:Yopai,有興趣的可以關注,每週不定期更新,分享可以增加世界的快樂

相關推薦

圖解javascript原型

圖解javascript原型鏈 作者: HerryLo 本文永久有效連結: https://github.com/AttemptWeb...... 原型鏈和原型物件是js的核心,js以原型鏈的形式,保證函式或物件中的方法、屬性可以讓向下傳遞,按照面向物件的說法,這就是繼承。而js通過原型鏈才得以實現

JavaScript--原型

doctype .html 構造函數 har www 關系 例子 cnblogs cto 原型鏈 一.構造函數與原型鏈的關系 博客中:http://www.cnblogs.com/shuiyi/p/5305435.html 的圖 例子:

JavaScript學習總結(十七)——Javascript原型的原理

學習總結 swp 是個 個人 {} 內存地址 ret nlb SDR 一、JavaScript原型鏈   ECMAScript中描述了原型鏈的概念,並將原型鏈作為實現繼承的主要方法。其基本思想是利用原型讓一個引用類型繼承另一個引用類型的屬性和方法。在JavaScript中

JavaScript——原型 — instanceof

type prototype his col 屬於 con pri ole console //構造函數 function Fn (name,age) { this.name = name; } //顯示原型 Fn.prototype.alertName = f

javascript原型繼承

UNC 返回值 object def fin java tostring cti 指向 當定義一個函數的時候,函數對象就會默認帶一個prototype對象屬性。 通過new去構造一個對象(obj),它的原型會指向構造器的prototype屬性(foo.prototype)。

明白JavaScript原型和JavaScrip繼承

creat oms 訪問 函數的原型 form eat sub rms amp 原型鏈是JavaScript的基礎性內容之一。其本質是JavaScript內部的設計邏輯。 首先看一組代碼: 1 <script type="text/javascript"&g

JavaScript原型和繼承

eat 過渡 存在 es6 向上 reset 保護 foo 創建 1.概念   JavaScript並不提供一個class的實現,在ES6中提供class關鍵字,但是這個只是一個語法糖,JavaScript仍然是基於原型的。JavaScript只有一種結構:對象。每

淺談 JavaScript 原型

概述 在 JavaScript 中有種說法叫 “萬物皆物件”,就是說無論是建構函式建立的例項,建構函式本身、原型物件、陣列、函式本質上都是物件,都擁有 __proto__ 屬性,即隱式原型,所有函式都擁有 prototype屬性,即顯式原型(僅限函式),原型物件

詳談JavaScript原型

轉自部落格園:https://www.cnblogs.com/chengzp/p/prototype.html                           &

深入理解JavaScript原型與繼承

原型鏈 原型鏈一直都是一個在JS中比較讓人費解的知識點,但是在面試中經常會被問到,這裡我來做一個總結吧,首先引入一個關係圖: 一.要理解原型鏈,首先可以從上圖開始入手,圖中有三個概念: 1.建構函式: JS中所有函式都可以作為建構函式,前提是被new操作符操作; function P

JavaScript 原型 實戰

最近看到這麼一道題 如何讓下面的程式碼執行: const a = [1, 2, 3, 4, 5]; // Implement this a.multiply(); console.log(a); // [1, 2, 3, 4, 5, 1, 4, 9, 16, 25] 執

如何理解JavaScript原型?

原理 每一個物件都是有原型的 , 用物件的 prototype() 就可以得到物件的原型 , 在得到物件原型之後就可以獲取原型的原型 , 直到得到的是一個null為止 , 這個過程被稱作原型鏈 首先原型也是物件,也叫原型物件 . 原型可以擴充套件建

JavaScript原型與繼承操作例項總結

本文例項講述了JavaScript原型鏈與繼承操作。分享給大家供大家參考,具體如下: 1. JavaScript繼承 JavaScript繼承可以說是發生在物件與物件之間,而原型鏈則是實現繼承的主要方法; 1.1 原型鏈 利用原型讓一引用型別繼承另一個引用型別的屬性和方法。

深入解析javascript原型

首先我們要弄清楚幾個概念: 一、函式物件和普通物件 我們定義的function,其實是Function物件的一個例項,如:function a(name){this.name=name}相當於var a=new Function('name','this.name=nam

JavaScript原型與繼承內容總結

總結 第三天: 1. JavaScript繼承 JavaScript繼承可以說是發生在物件與物件之間,而原型鏈則是實現繼承的主要方法; 1.1 原型鏈 利用原型讓一引用型別繼承另一個引用型別的屬性和方

javascript原型追根溯源

寫在前面 上篇文章詳細解釋了一下prototype與__proto__兩個屬性的差異與聯絡。這裡涉及到原型鏈的概念,所以我就又生出了疑問,javascript中既然所有東西都是物件,而他們又是相互繼承的關係,子又生孫,孫又生子,無窮匱也,那他們的源頭又在哪裡,

Javascript原型詳解

js建立之初,正值java大行其道,面向物件程式設計春風正盛,js借鑑了java的物件機制,但僅是看起來像,也就是js的建構函式,如下: function People(age) { this.age = age; this.getAge = function

淺談JavaScript原型繼承方式與閉包

JavaScript中的繼承方式有兩種,一種是通過call或apply方法借用建構函式,另一種方法則是通過原型來繼承。這篇文章用於梳理自己關於prototype繼承的知識點,也略微涉及一點點閉包的概念。 關於原型 在JavaScript中每當我們建立一個Fu

JavaScript 原型與繼承

4.3 linu mod 管理員 art 狀態 ado 最好的 -s 用戶權限的相關命令: 權限類型: 01 讀 read r 4 02 寫 write w 2 03 執行 excute x 1 組權限: 開發組:將所有開發人員添加到一個組中,這個組中所有人就有

Javascript原型梳理

-s 徹底 意義 代碼 key nbsp 當前 ring 語言 先來個簡單的代碼: function Info(name, age){ this.name = name; this.age = age; this.message = function (