Javascript什么是原型和原型鏈,八股文

原型:函數都有prototype屬性,稱之為原型,也稱為原型對象
原型可以放一些屬性和方法,共享給實例對象使用
原型可以做繼承

原型鏈:對象都有__proto__屬性,這個屬性指向它的原型對象,原型對象也是對象,也有__proto__屬性,指向原型對象的原型對象,這樣一層一層形成的鏈式結構稱為原型鏈,最頂層找不到則返回 null

1.javascript原型鏈(經典函數構造器 + prototype)

function Person(name) {this.name = name;
}Person.prototype.sayHello = function() {console.log(`Hello, my name is ${this.name}`);
};const alice = new Person('Alice');
alice.sayHello();  // Hello, my name is Aliceconsole.log(alice.__proto__ === Person.prototype);  // true
console.log(Person.prototype.__proto__ === Object.prototype);  // true
console.log(Object.prototype.__proto__);  // null

解釋:

  • 每個對象都有一個內部屬性 [[Prototype]](常用 __proto__ 訪問),指向它的原型對象。

  • 當訪問對象的屬性或方法時,如果自身沒有,會沿著 [[Prototype]] 一層層往上找,這個查找鏈就是原型鏈

  • 上面例子中,alice 訪問 sayHello 方法時沒在自身屬性里找到,就去它的原型對象 Person.prototype 查找。

  • Person.prototype 的原型是 Object.prototype,這構成了原型鏈的多層關系。

  • Object.prototype 的原型是 null,鏈條終點。

2.TypeScript 版本(class 語法)

class Person {name: string;constructor(name: string) {this.name = name;}sayHello() {console.log(`Hello, my name is ${this.name}`);}
}const alice = new Person('Alice');
alice.sayHello();  // Hello, my name is Aliceconsole.log(Object.getPrototypeOf(alice) === Person.prototype);  // true
console.log(Object.getPrototypeOf(Person.prototype) === Object.prototype);  // true
console.log(Object.getPrototypeOf(Object.prototype));  // null

解釋:

  • TypeScript 使用 class 關鍵字聲明類,語法更現代,代碼更清晰。

  • sayHello 是類的方法,實際掛載在 Person.prototype 上,實例通過原型鏈訪問。

  • Object.getPrototypeOf() 用來獲取對象的原型,效果和 __proto__ 類似,但更標準安全。

  • 原型鏈關系和JavaScript版本完全一樣:實例原型 → 類的 prototypeObject.prototypenull

3.總結

  • JavaScript版本用構造函數和顯式原型,適合傳統理解原型鏈機制。

  • TypeScript版本用類語法,更符合現代代碼風格,本質上還是基于JavaScript原型鏈實現。

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

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

相關文章

生日悖論理論及在哈希函數碰撞中的應用

目錄 一、生日悖論(Birthday Paradox)介紹 二、生日悖論的數學解釋 (一)計算所有人生日都不同的概率 數學推導 示例計算 (二)至少有兩個人生日相同的概率 三、哈希函數碰撞與生日悖論的關系思考 &a…

探索數據的力量:Elasticsearch中指定鏈表字段的統計查詢記錄

目錄 一、基本的數據結構說明 二、基本的統計記錄 (一)統計當前索引中sellingProducts的所有類型 (二)檢索指定文檔中sellingProducts的數據總量 (三)檢索指定文檔中sellingProducts指定類型的數量統計…

細節致勝:如何重塑反向海淘用戶體驗

在反向海淘的激烈競爭中,客戶體驗已成為決定勝負的關鍵。一次流暢的購物旅程、一個貼心的服務細節,都可能讓海外消費者成為品牌的忠實傳播者。易境通代購商城系統正是以極致體驗為核心,通過精細化服務管理,助力企業贏得用戶口碑與…

Docker 分階段構建

Docker 分階段構建 Docker 分階段構建(Multi-stage Build)是一種高效的鏡像構建技術,允許在一個 Dockerfile 中使用多個構建階段,每個階段可以使用不同的基礎鏡像,最終只保留需要的文件,從而顯著減小鏡像體…

人工智能學習23-BP-圖像編碼

人工智能學習概述—快手視頻 人工智能學習23-BP-圖像編碼—快手視頻

k8s的開篇學習和安裝

k8s的開篇學習 學習網站 參考資料 1。 K8S能干什么 [概述 | Kubernetes](https://kubernetes.io/zh-cn/docs/concepts/overview/#why-you-need-kubernetes-and-what-can-it-do)需要開代理 2。docker資料 https://docs.docker.com/get-started/3.prometheus資料 https://promet…

CS144 lab0: warmup

Lab 0: networking warmup 1. 環境 依賴配置 sudo apt update && sudo apt install git cmake gdb build-essential clang \clang-tidy clang-format gcc-doc pkg-config glibc-doc tcpdump tsharkg13配置 ppa中科大源 # deb https://ppa.launchpadcontent.net/ubu…

StarRocks

StarRocks 是一個高性能的 分布式 MPP(Massively Parallel Processing)數據庫,主要用于 實時數據分析(Real-Time Analytics),是新一代的 OLAP 數據庫,對標 ClickHouse、Apache Doris 等。 ?? 一、StarRocks 是什么? StarRocks 是一個面向實時分析場景、支持高并發、高…

8088單板機8259中斷的軟件觸發測試

1.工作原理 8086和8088的中斷設計的是很巧妙的,比如給8259的IR1配置了一個中斷,中斷號為21H,那么當真個引腳出現高電平的時候,就會觸發相應上的中斷響應。但,這不是唯一能夠觸發21H中斷的方法,還可以通過軟…

TC3xx中PFLASH緩存對XCP標定常量的影響

1、TC3xx中PFLASH緩存(Cache)對XCP標定的影響 XCP的映射用到TC3XX的Overlay功能需要使用一段Pflash內存。 Pflash數據有兩個段區。分別為0x80000000和0xA0000000為起始地址的PFLASH段。 如上,兩段數據的區別是一個段8有CACHE緩存,…

代碼審計服務:如何解決誤報與漏報難題,保障軟件安全?

代碼審計服務在保障軟件質量、安全合規等方面扮演著關鍵角色,特別是在數字化浪潮席卷而來的今天,其重要性日益顯著。它能揭露代碼中的不足,進而為軟件開發提供有力的效率和安全性保障。 誤報與漏報難題 常規的代碼審查工具,其錯…

web方向第一次考核內容

一.考核內容 Web組大一下考核之HTML、CSS 1.為什么要清除浮動(4),清除浮動的方法有哪些?(6)(至少兩種) 2.怎么實現左邊左邊寬度固定右邊寬度自適應的布局?(10) 3.講講flex:1;(10) 4.怎么實現移動端適配不同…

HarmonyOS 5 Cordova有哪些熱門插件?

以下是 HarmonyOS 5 環境下 Cordova 的熱門插件及核心代碼實現(綜合實際開發場景高頻使用): 一、核心工具類插件 1. ?高性能圖片壓縮插件? ?功能?:直接調用鴻蒙 ImageSource API 實現硬件級加速壓縮 ?代碼實現?&#xff…

Cesium圓錐漸變色實現:融合頂點著色器、Canvas動態貼圖與靜態紋理的多方案整合

在Cesium中渲染圓錐體時,無論采用頂點著色器、Canvas動態貼圖還是靜態圖片貼圖,其漸變色均需滿足以下條件: 圓形結構:漸變范圍限定在圓錐底面的圓形區域內。徑向擴散:顏色從圓心向外逐步變化(如紅→黃→藍…

周末復習1

質量管理包括質量規劃,質量保證,質量控制。質量管理體系要定期執行內部審核和管理評審。二者都屬于質量保證過程。 實施質量保證的方法很多,過程分析屬于實施質量保證的常用方法。 采購管理過程包括編制采購計劃,實施采購,控制采購和結束采購…

英飛凌亮相SEMICON China 2025:以SiC、GaN技術引領低碳化與數字化未來

在剛剛落幕的SEMICON China 2025上,全球半導體行業再度匯聚上海,共同探討產業未來。本屆展會以“跨界全球?心芯相聯”為主題,覆蓋芯片設計、制造、封測、設備及材料等全產業鏈,充分展現了半導體技術的最新突破與創新趨勢。 作為…

工業路由器賦能倉庫消防預警,智慧消防物聯網解決方案

在現代物流與倉儲行業蓬勃發展的當下,倉庫的規模與存儲密度不斷攀升,消防預警的重要性愈發凸顯。傳統消防系統在應對復雜倉庫環境時,預警滯后、設備聯動不暢、數據管理困難等弊端逐漸暴露。為了有效解決這些問題,工業路由器作為物…

【開發常用命令】:服務器與本地之間的數據傳輸

服務器與本地之間的數據傳輸 本地給服務器上傳數據 scp /path/to/local_file usernameremotehost:/path/to/remote_directory例如 scp test.txt root192.168.1.xxx:/test # test.txt 需要上傳到服務器的文件,如果非當前路徑,使用文件的相對路徑或絕對…

springboot + nacos + k8s 優雅停機

1 概念 優雅停機是什么?網上說的優雅下線、無損下線,都是一個意思。 優雅停機,通常是指在設備、系統或應用程序中止運作前,先執行一定的流程或動作,以確保數據的安全、預防錯誤并保證系統的整體穩定。 一般來說&…

Python 標準庫之 math 模塊

1. 前言 math 模塊中包含了各種浮點運算函數,包括: 函數功能floor向下取整ceil向上取整pow指數運算fabs絕對值sqrt開平方modf拆分小數和整數fsum計算列表中所有元素的累加和copysign復制符號pi圓周率e自然對數 2. math.floor(n) 函數 math.floor(n) 的…