1. 程式人生 > >javascript 原型、原型鏈之間的關係

javascript 原型、原型鏈之間的關係

在講 javascript原型之前,先來了解下js這門語言的特性,它與其它面嚮物件語言不同,比如java,php等有class的概念,js沒有class這個概念,js裡面所有的物件都是通過函式(function)來模擬的,並且通過 new 關鍵字來例項化一個構造器函式。而這個構造器函式就好比java,php中類裡面的建構函式。

一、javascript 原型(__proto__prototype 之間的關係)
js中一切皆是物件,每個物件都有一個 __proto__屬性,該屬性可通過標準瀏覽器檢視到。而每個函式都有一個 prototype 屬性。所以兩者之間就有了以下圖的關係。
這裡寫圖片描述

注:prototype

是函式才具有的屬性。__proto__是物件才具有的屬性。在大多數情況下,我們可以將 __proto__ 理解為構造器的原型。
也就是 __proto__ === constructor.prototype

這裡寫圖片描述

二、原型鏈與 __proto__ 的指向。
前面我們說過,每一個物件都具有一個 __proto__ 屬性,該屬性也是一個物件,既然也是一個物件,那麼自身必然存在一個__proto__,這樣逐級向上查詢,此時就形成了一個鏈式查詢,我們把這個鏈式稱為原型鏈。

注意:__proto__ 不是永不停止地向上查詢,凡事都有一個度,js也不例外,__proto__的指向與你建立物件的形式有關。比如:

這裡寫圖片描述

可以看出: __proto__ 的繼承的終極是Object,遇到Object後後面將不再有__proto__屬性。Object是所有物件的頂級物件。

最後我們來說說下使用 new 關鍵字例項化一個物件時,這中間過程發生了什麼?
這裡寫圖片描述

相關推薦

javascript 原型原型之間關係

在講 javascript原型之前,先來了解下js這門語言的特性,它與其它面嚮物件語言不同,比如java,php等有class的概念,js沒有class這個概念,js裡面所有的物件都是通過函式(function)來模擬的,並且通過 new 關鍵字來例項化一個構造

建構函式例項原型原型之間關係

1、建構函式是什麼        所謂的建構函式其實就是一個普通的函式前面加了new運算子,其實質也是一個函式,所以建構函式都有函式的prototype屬性。2、例項是什麼        例項就是通過建

Javascript原型繼承的理解

自己 test 參數 自動 3.3 圖片 返回值 面向 指向 一、序言 ??和其他面向對象的語言(如Java)不同,Javascript語言對類的實現和繼承的實現沒有標準的定義,而是將這些交給了程序員,讓程序員更加靈活地(當然剛開始也更加頭疼)去定義類,實現繼承。(以下不討

深入理解JavaScript原型原型繼承。

建構函式,原型物件,例項物件三者之間的關係 1.建構函式可以例項化物件 2.建構函式中有一個prototype屬性,是建構函式的原型物件 3.原型物件(prototype)中有constructor構造器指向的是當前原型物件所在的建構函式 4.例項物件的__proto__原型指向建

JavaScript物件原型繼承閉包

什麼是面向物件程式設計 說到面向物件,每個人的理解可能不同,以下是個人對面向物件程式設計的理解: 對於面向物件程式設計這幾個字每一個前端都應該非常熟悉,但是到底應該如何去理解他呢?就程式設計方式而言,javascrip可以分成兩種發方式:面向過程和麵向物件,所謂的面向過程就是比較常用的函數語言程式設計,通

JavaScript物件原型繼承和閉包

什麼是面向物件程式設計 說到面向物件,每個人的理解可能不同,以下是個人對面向物件程式設計的理解: 對於面向物件程式設計這幾個字每一個前端都應該非常熟悉,但是到底應該如何去理解他呢?就程式設計方式而言,javascrip可以分成兩種發方式:面向過程和麵向物件,所謂的面向過程就是比較常用的函數語言程式設計,通

JavaScript學習筆記——原型原型call/apply—day five

目錄 原型 定義 原型的增刪改查 物件如何檢視物件的建構函式 物件如何檢視原型 原型鏈 如何構成原型鏈 Object.create(原型)  call/apply 原型 定義 原型是function物件的一個屬性,它定義了建

談談JavaScript原型原型建構函式prototype__proto__和constructor

  原型、原型鏈、建構函式是JavaScript比較難的知識點,但是它們又功能強大,是我們進行元件開發、模組開發必須掌握的技能,翻閱網上相關的博文,個人覺得這幾篇博文不錯,可以一讀:   1)湯姆大叔:強大的原型和原型鏈   2)深入理解JavaScript系列(10):JavaScript

Javascript原型繼承的理解

出處:https://www.cnblogs.com/codernie/p/9098184.html一、序言  和其他面向物件的語言(如Java)不同,Javascript語言對類的實現和繼承的實現沒有標準的定義,而是將這些交給了程式設計師,讓程式設計師更加靈活地(當然剛開始

JavaScript中的原型原型原型模式

今天,咱來聊聊JavaScript中的原型跟原型鏈 # 原型跟原型模式 這一塊的知識,主要是設計模式方面的。 首先,我們知道JavaScript是面向物件的。既然是面向物件,那它自然也有相應的類跟物件等概念。 在JavaScript中,function這個東西還是比較特殊的,它既能用來宣告方法,還能用來宣告一

關於對象構造函數原型原型繼承

mes 創建對象 light 表示 {} highlight col 面向 原型鏈 對象: 在傳統的面向過程的程序設計中,會造成函數或變量的冗余。而js中對象的目的是將所有的具有相同屬性或行為的代碼整合到一起,形成一個集合,這樣就會方便管理,例如: var person

原型原型對象構造函數原型理解

text 接收 所有 標註 情況 會有 屬性 es5 一個 1. 基本概念: “原型屬性”也可以叫做“原型”(prototype):所有函數都有prototype,我覺得可以理解為python中的類屬性,不需要通過實例,直接用類(es5就是函數名)可以調用,下面列舉了三種創

Js中的物件建構函式原型原型及繼承

1、物件 在傳統的面向過程的程式設計中,會造成函式或變數的冗餘。而JS中物件的目的是將所有的具有相同屬性或行為的程式碼整合到一起,形成一個集合,這樣就會方便我們管理,例如: var person1={     name:"tan",     age:26,     sho

關於JS原型原型繼承的問題

怎麽 都是 this -s 不是函數 一個 prototype true function   任何對象都是被構造出來的,構造對象的方法稱為構造函數,構造函數生成的對象為構造函數的實例。聲明一個對象可以var obj = {},也可以var obj = new Object

js系列教程13-原型原型作用閉包全解

全棧工程師開發手冊 (作者:欒鵬) 【物件、變數】 一個物件就是一個類,可以理解為一個物體的標準化定義。它不是一個具體的實物,只是一個標準。而通過物件例項化得到的變數就是一個獨立的實物。比如通過一個物件定義了“人”,通過“人”這個標準化定義,

前端面試中讓你困惑的閉包原型原型究竟是什麼?

       前段時間我朋友從上家公司離職,上週開始了前端面試(現在已經上班了),一天我下班回到出租房時,他問我原型鏈是什麼?一時半會我竟然也不知道從何說起能夠讓他很清楚的明白,又忽然想起之前我一個朋友也問過我閉包的問題,因此在這裡記錄解惑一下,下面我會以面試官和應聘者

JS基礎-該如何理解原型原型

JS的原型、原型鏈一直是比較難理解的內容,不少初學者甚至有一定經驗的老鳥都不一定能完全說清楚,更多的"很可能"是一知半解,而這部分內容又是JS的核心內容,想要技術進階的話肯定不能對這個概念一知半解,碰到問題靠“猜”,卻不理解它的規則! prototype 只有函式有prototype屬性 let a =

建構函式原型原型繼承

JS裡一切皆物件,物件是“無序屬性的集合,其屬性值可以是資料或函式”。 事實上,所有的物件都是由函式建立的,而常見的物件字面量則只是一種語法糖: ```js // let user = {name: 'paykan', age: 29} ,等同於: let user = new Object();

JavaScript 型別原型與繼承學習筆記

[TOC] --- 這篇筆記中有什麼: ✔️JavaScript的極簡介紹 ✔️JavaScript中資料型別的簡單梳理 ✔️JavaScript中的面向物件原理 這篇筆記中沒有什麼: ❌JavaScript的具體語法 ❌JavaScript通過各種內建物件實現的其他特性 --- ## 一、概覽

分享知識-快樂自己: Oracle資料庫例項使用者表空間之間關係

資料庫:   Oracle資料庫是資料的物理儲存。這就包括(資料檔案ORA或者DBF、控制檔案、聯機日誌、引數檔案)。   其實Oracle資料庫的概念和其它資料庫不一樣,這裡的資料庫是一個作業系統只有一個庫。可以看作是Oracle就只有一個大資料庫。 例項:   一個Oracle例項(Oracle