「類 vs 實例」對比 ,「類 - 原型 - 實例」的關系

堅持的本身就是意義

目錄

  • 直觀類比
  • 類 (Class) vs 實例 (Instance)
    • 對比表
    • 示例代碼
  • 類 - 原型 - 實例關系圖
  • 解釋:
    • 類 (class Person)
    • 原型 (Person.prototype)
    • 實例 (new Person(...))
  • 總結:

直觀類比

  • 類(Class) = 圖紙 / 模板
  • 實例(Instance) = 根據圖紙造出來的房子 / 產品

類 (Class) vs 實例 (Instance)

對比表

對比點類 (Class)實例 (Instance)
定義方式使用 class 關鍵字定義使用 new 類名(...) 創建
打印結果打印出來的是 類的結構/定義打印出來的是 對象(屬性 + 值)
內存位置存在于函數(構造器)區域存在于堆內存,每次 new 都是新的對象
屬性類本身沒有具體屬性值,只定義結構實例對象上有具體的屬性和值
方法方法定義在類的 prototype實例可以直接調用這些方法
用途相當于一個“模板”相當于由模板生產出來的“成品”
例子代碼console.log(Person)
👉 輸出:class Person { constructor(...) {...} speak() {...} }
console.log(p1)
👉 輸出:Person { name: '張三', age: 22 }

示例代碼

class Person {name: stringage: numberconstructor(name: string, age: number) {this.name = namethis.age = age}speak() {console.log(`我叫${this.name},今年${this.age}`)}
}console.log(Person) // 類的定義const p1 = new Person("張三", 22)
console.log(p1)     // 實例對象 Person { name: '張三', age: 22 } 
p1.speak()          // 調用實例方法 我叫張三,今年22歲

類 - 原型 - 實例關系圖

   ┌─────────────────────────┐│        class Person     ││ ─────────────────────── ││ constructor(name, age)  ││ speak() { ... }         │  ← 方法掛到 prototype 上└─────────────┬───────────┘│▼┌─────────────────┐│ Person.prototype│   ← 原型對象│ ─────────────── ││ speak() { ... } │   ← 共享方法│ constructor: f  │└───────▲─────────┘│ [[Prototype]]┌────────────┴────────────┐│                         │
┌──┴───────────┐      ┌──────┴───────────┐
│   p1 實例     │      │    p2 實例       │
│ ───────────  │      │ ───────────      │
│ name: '張三'  │      │ name: '李四'     │
│ age: 22      │      │ age: 18          │
└──────────────┘      └──────────────────┘

解釋:

類 (class Person)

  • 定義了構造函數和方法。
  • 方法其實會自動掛載到 Person.prototype 上。

原型 (Person.prototype)

  • 所有實例共享的方法都存在這里。例如 speak() 方法,只存一份,所有實例都能通過原型鏈訪問。

實例 (new Person(…))

  • 每次 new 都會創建一個新的對象(放在堆內存里),對象上存儲 獨有的數據屬性(name, age)。
  • 調用 p1.speak() 時,JS 引擎會:
    • 先找 p1 本身有沒有 speak
    • 找不到 → 順著 proto(即原型鏈)去 Person.prototype 找
    • 找到后執行
class Person {constructor(name, age) {this.name = namethis.age = age}speak() {console.log(`我叫${this.name},今年${this.age}`)}
}const p1 = new Person("張三", 22)console.log(p1) // Person { name: '張三', age: 22 }
console.log(Person.prototype) // { speak: f, constructor: f }
console.log(p1.__proto__ === Person.prototype) // true

總結:

  • 類 (Class) 是模板,方法都放在 prototype 上。
  • 實例 (Instance) 存放自己的數據屬性。
  • 實例通過 proto 鏈接到 Person.prototype,形成原型鏈來共享方法。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/98578.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/98578.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/98578.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

第一課、Cocos Creator 3.8 安裝與配置

介紹說明 本文主要介紹在windows系統中,安裝開發Cocos使用的軟件工具,主要包含:安裝CocosDashboard控制面板、CocosCreator3.8編輯器和腳本編輯器 VS Code 。 一、Cocos Dashboard 的安裝 說明:Cocos Dashboard 主要作用是能夠同…

從航空FACE的一個落地方案漫談汽車HPC軟件架構的思維轉變(2/3)FACE的“段”同Autosar的“層”概念區別探索

文章目錄PART THREE:段和層的概念比較一、“段”更強調“功能閉環責任歸屬”,而非“單純的層級堆疊”二、“段”規避“層”的“剛性依賴陷阱”,適配航空系統的“靈活組合需求”三、“段”貼合航空工業的“工程化語言習慣”,降低跨…

金融量化指標--6InformationRatio信息比率

InformationRatio信息比率計算公式添加圖片注釋,不超過 140 字(可選)一、信息比率(IR)是什么?核心概念:信息比率衡量的是投資組合經理相對于某個基準指數(Benchmark)&…

Java全棧開發面試實錄:從基礎到微服務的實戰經驗分享

Java全棧開發面試實錄:從基礎到微服務的實戰經驗分享 一、初識面試場景 我叫李明,28歲,畢業于復旦大學計算機科學與技術專業,碩士學歷。在互聯網行業已經有5年的工作經驗,先后在兩家中型互聯網公司擔任Java全棧開發工程…

【51單片機】【protues仿真】基于51單片機公交報站系統

目錄 一、主要功能 二、使用步驟 三、硬件資源 四、軟件設計 五、實驗現象 一、主要功能 主要功能如下: 1、LCD12864顯示時間、日期、公交車車站、溫度等 2、按鍵設置時間,顯示公交車信息 3、串口播報相應站點信息 4、按鍵控制上行、下行、手動播…

第1節-PostgreSQL入門-從表中查詢數據

摘要:在本教程中,你將學習如何使用 PostgreSQL 的 SELECT 語句從表中檢索數據。 SELECT 語句 要從表中查詢數據,需使用 PostgreSQL 的 SELECT 語句。 以下是 SELECT 語句的基本語法: SELECT column1, column2, ... FROM table_name;在這種語法中: 首先,在 SELECT 關…

【C++進階】---- map和set的使用

1.序列式容器和關聯式容器 前?我們已經接觸過STL中的部分容器如:string、vector、list、deque、array、forward_list等,這些容器統稱為序列式容器,因為邏輯結構為線性序列的數據結構,兩個位置存儲的值之間?般沒有緊密的關聯關系…

430章:Python Web爬蟲入門:使用Requests和BeautifulSoup

在軟件交付日益高頻、用戶需求快速迭代的今天,版本發布流程的規范性直接決定了團隊的交付效率、產品質量和用戶滿意度。然而,許多團隊仍面臨以下痛點:發布混亂:分支管理隨意,代碼沖突頻發;質量失控&#xf…

代碼隨想錄第七天|● 454.四數相加II ● 383. 贖金信 ● 15. 三數之和 18.四數之和

本文所有題目鏈接/文章講解/視頻講解:https://programmercarl.com/0454.%E5%9B%9B%E6%95%B0%E7%9B%B8%E5%8A%A0II.html 454.四數相加II 有四個數組,如果要遍歷則時間復雜度太大 可以選擇分組,a和b一組,c和d一組 這樣就可以等同于…

Vue3源碼reactivity響應式篇之computed計算屬性

概述 vue3中,computed函數用于表示計算屬性,有惰性求值、響應式追蹤依賴的特點。本文將介紹computed的實現原理以及其機制細節。 源碼解析 computed計算屬性和computed方法、ComputedRefImpl類以及refreshComputed方法有關。 computed方法 computed暴露給…

[嵌入式embed]Keil5燒錄后STM32不自動運行,復位才能運行

[嵌入式embed]Keil5燒錄后STM32不自動運行,復位才能運行Keil5-驗證“Reset and Run”功能是否生效參考文章Keil5-驗證“Reset and Run”功能是否生效 參考文章 Keil5燒錄后STM32不自動運行?必須復位才能啟動的終極解決方案

阿里云Qwen3系列模型部署微調評測

與阿里云一起輕松實現數智化讓算力成為公共服務:用大規模的通用計算,幫助客戶做從前不能做的事情,做從前做不到的規模。讓數據成為生產資料:用數據的實時在線,幫助客戶以數據為中心改變生產生活方式創造新的價值。模型…

北京魯成偉業 | 三屏加固筆記本電腦C156F3

在工業控制、應急指揮、測控及無人機作業等對設備穩定性與環境適應性要求較高的領域,一款性能均衡且堅固耐用的計算機往往能為工作效率提供有力支撐。三屏加固筆記本電腦C156F3便是針對這類需求設計的設備,憑借多方面的特性,可滿足不同場景下…

七彩氛圍燈芯片EH3A01RGB驅動芯片定時開關IC方案

?在現代智能家居和個性化照明領域,EH3A01-442A-A24F小夜燈定時芯片憑借其多功能、低功耗和靈活配置的特點,成為LED氛圍燈、小夜燈及便攜式照明方案的理想選擇。本文將深入解析該芯片的核心功能、電氣特性及應用場景,幫助開發者與用戶全面掌握…

Spring Boot 項目新增 Module 完整指南

1. 模塊化開發的重要性 在軟件開發中,隨著項目規模的不斷擴大,??模塊化設計??已成為提高代碼可維護性和可復用性的關鍵實踐。通過將大型項目拆分為多個獨立模塊,開發團隊可以??并行開發??不同功能組件,降低代碼耦合度&…

Git cherry-pick 與分支重置技術實現代碼健全性保障下的提交記錄精簡

代碼健全性保障:上市審查中的 Git 提交記錄整理方案(核心功能提交篩選流程) 一、背景與目的 我司正處于上市籌備階段,券商需對核心系統進行 Git 代碼審查,并基于提交記錄生成測試報告。由于原始提交記錄包含大量細節性…

前后端聯調時出現的一些問題記錄

服務器的ip沒有設置成所有ip都能訪問的,或防火墻沒開跨域問題(剛開始異源,有這個問題,主要是前端做一下配置代理,后端也可以配置跨域資源共享(CORS))Configuration public class Cor…

數字圖像處理-設計生成一個半球

1 實驗題目設計生成一個半球(matlab)。2 程序源代碼%Hemisphere clear,clc,close all %Sphere radius R1; %Set grid number n30; theta (-n:2:n)/n*pi; phi ([0,0:2:n])/n*pi/2; cosphi cos(phi); cosphi(1) 0; cosphi(end) 0; sintheta sin(thet…

mac M1上安裝windows虛擬機報錯

Parallels版本是18.0.02 mac:arm系統15.6.1 自動獲取windows11下載,安裝的時候報錯,藍屏,是因為安裝的版本不對,猜測原因應該是18.0.02不支持最新版的windows11,需要更新最新版的Parallels。 解決方案&am…

基于R語言機器學習方法在生態經濟學領域中的實踐技術應用

近年來,人工智能領域已經取得突破性進展,對經濟社會各個領域都產生了重大影響,結合了統計學、數據科學和計算機科學的機器學習是人工智能的主流方向之一,目前也在飛快的融入計量經濟學研究。表面上機器學習通常使用大數據&#xf…