Vue 攔截監聽原理

Vue 漸進式JavaScript 框架 學習筆記 - Vue 攔截監聽原理

目錄

攔截監聽原理

如何跟蹤變化

攔截監聽示例

觀察者

注意:vue3的變化

總結


攔截監聽原理

如何跟蹤變化

當你把一個普通的Javascript 對象傳入 Vue 實例作為data選項,Vue 將遍歷此對象所有的property,并使用 0bject.defineProperty 把這些 property 全部轉為 getter/setter。0bject.defineProperty 是 ES5 中一個無法 shim 的特性,這也就是 vue 不支持?IE8 以及更低版本瀏覽器的原因。

這些 getter/setter對用戶來說是不可見的,但是在內部它們讓 vue 能夠追蹤依賴,在 property 被訪問和修改時通知變更。這里需要注意的是不同瀏覽器在控制臺打印數據對象時對 getter/setter 的格化并不同,所以建議安裝 vue-devtools 來獲取對檢查數據更加友好的用戶界面。

攔截監聽示例

Vue對變量(狀態)改變攔截監聽的原理是利用Es5中一個方法。

示例如下:

<script>var obj = {};Object.defineProperty(obj, 'myname',{get() {console.log('訪問了');},set() {console.log('修改了')}})
</script>

通過控制臺訪問和修改屬性

Get set攔截,只要有人訪問、有人修改就會被觸發

幫你進行攔截值的改變,幫你調用dom修改對象值。

觀察者

每個組件實例都對應一個 watcher 實例,它會在組件渲染的過程中把“接觸”過的數據 property 記錄為依賴。之后當依賴項的 setter 觸發時,會通知 watcher,從而使它關聯的組件重新渲染。

注意:vue3的變化

Object.defineProperty有以下缺點。

1、無法監聽es6的Set、Map 變化;

2、無法監聽Class類型的數據;

3、屬性的新加或者刪除也無法監聽,

4、數組元素的增加和刪除也無法監聽。

針對Object.defineProperty的缺點,ES6 Proxy都能夠完美得解決,它唯一的缺點就是,對IE不友好,所以vue3在檢測到如果是使用IE的情況下(沒錯,IE11都不支持Proxy),會自動降級為Obiect.defineProperty的數據監聽系統。

總結

Vue 漸進式JavaScript 框架 學習筆記 - Vue 攔截監聽原理

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

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

相關文章

全面評測 DOCA 開發環境下的 DPU:性能表現、機器學習與金融高頻交易下的計算能力分析

本文介紹了我在 DOCA 開發環境下對 DPU 進行測評和計算能力測試的一些真實體驗和記錄。在測評過程中&#xff0c;我主要關注了 DPU 在高并發數據傳輸和深度學習場景下的表現&#xff0c;以及基本的系統性能指標&#xff0c;包括 CPU 計算、內存帶寬、多線程/多進程能力和 I/O 性…

基于JAVA的校園二手商品交易平臺的設計與開發

摘 要&#xff1a;政府政策引導與社會觀念的轉變使得國內大學生的創業意識逐漸提高&#xff0c;很多高校大學生開始自主創業。目前我國各大高校暫且還沒有較為成型的針對校內學生創業者的校園網絡服務平臺。本文首先主要是介紹了關于java語言以及web開發的相關技術&#xff0c;…

HarmonyOS Next 應用UI生成工具介紹

背景 HarmonyOS Next適配開發過程中難買難要參考之前邏輯&#xff0c;但是可能時間較長文檔不全&#xff0c;只能參考Android或iOS代碼&#xff0c;有些邏輯較重的場景還可以通過AI工具將Android 的Java代碼邏輯轉成TS完成部分復用。對于一些UI場景只能手動去寫&#xff0c;雖…

總結6..

背包問題的解決過程 在解決問題之前&#xff0c;為描述方便&#xff0c;首先定義一些變量&#xff1a;Vi表示第 i 個物品的價值&#xff0c;Wi表示第 i 個物品的體積&#xff0c;定義V(i,j)&#xff1a;當前背包容量 j&#xff0c;前 i 個物品最佳組合對應的價值&#xff0c;同…

代碼隨想錄day1

704.二分查找&#xff1a; 1.左閉右閉 int search(vector<int>& nums, int target) {int right nums.size() - 1;int left 0;while(left < right){int middle left ((right - left) >> 1);if(nums.at(middle) target){return middle;}else if(nums[m…

四級詞匯第六期

1.accomplish 完成 2.implication 暗示 3.complicated 復雜的 4.extent 范圍 5.sufficient 充足的 6.remarkable 引人注目的 7.insight 洞察 8.executive 管理的 9.overlook 俯瞰 忽略 10.urge 渴望 激勵 11.urgent 緊急的 12.accumulate 積累 13.appreciate 賞識 …

OpenHarmony OTA升級參考資料記錄

OpenHarmony 作為一個開源分布式操作系統,通過其強大的 OTA(Over-The-Air)升級能力,為開發者和廠商提供了一套靈活而安全的系統升級方案。 OTA升級方式 根據升級包的應用方式,OpenHarmony 的 OTA 升級可以分為兩種:本地升級和網絡OTA升級。 本地升級 本地升級是將已制作…

【數據結構篇】順序表 超詳細

目錄 一.順序表的定義 1.順序表的概念及結構 1.1線性表 2.順序表的分類 2.1靜態順序表 2.2動態順序表 二.動態順序表的實現 1.準備工作和注意事項 2.順序表的基本接口&#xff1a; 2.0 創建一個順序表 2.1 順序表的初始化 2.2 順序表的銷毀 2.3 順序表的打印 3.順序…

SDL2基本的繪制流程與步驟

SDL2(Simple DirectMedia Layer 2)是一個跨平臺的多媒體庫,它為游戲開發和圖形應用提供了一個簡單的接口,允許程序直接訪問音頻、鍵盤、鼠標、硬件加速的渲染等功能。在 SDL2 中,屏幕繪制的流程通常涉及到窗口的創建、渲染目標的設置、圖像的繪制、事件的處理等幾個步驟。…

上位機工作感想-2024年工作總結和來年計劃

隨著工作年限的增增長&#xff0c;發現自己越來越不喜歡在博客里面寫一些摻雜自己感想的東西了&#xff0c;或許是逐漸被工作逼得“成熟”了吧。2024年&#xff0c;學到了很多東西&#xff0c;做了很多項目&#xff0c;也幫別人解決了很多問題&#xff0c;唯獨沒有漲工資。來這…

阿里云-銀行核心系統轉型之業務建模與技術建模

業務領域建模包括業務建模和技術建模&#xff0c;整體建模流程圖如下&#xff1a; 業務建模包括業務流程建模和業務對象建模 業務流程建模&#xff1a;通過對業務流程現狀分析&#xff0c;結合目標核心系統建設能力要求&#xff0c;參考行業建 模成果&#xff0c;形成結構化的…

Unity3D基于Unity整合BEPUphysicsint物理引擎實戰詳解

引言 Unity3D是一款流行的游戲引擎&#xff0c;提供了豐富的功能和工具&#xff0c;使開發者能夠輕松創建各種類型的游戲。其中&#xff0c;幀同步技術是游戲開發中至關重要的一環&#xff0c;它能確保多個玩家在同一時間內看到的游戲狀態是一致的。BEPUphysicsint是一個基于U…

【C++筆記】紅黑樹封裝map和set深度剖析

【C筆記】紅黑樹封裝map和set深度剖析 &#x1f525;個人主頁&#xff1a;大白的編程日記 &#x1f525;專欄&#xff1a;C筆記 文章目錄 【C筆記】紅黑樹封裝map和set深度剖析前言一. 源碼及框架分析1.1 源碼框架分析 二. 模擬實現map和set2.1封裝map和set 三.迭代器3.1思路…

win32匯編環境,怎么得到磁盤的盤符

;運行效果 ;win32匯編環境,怎么得到磁盤的盤符 ;以下代碼主要為了展示一下原理&#xff0c;應用GetLogicalDrives、GetLogicalDriveStrings函數、屏蔽某些二進制位、按雙字節復制內容等。以下代碼最多查8個盤&#xff0c;即返回值中的1個字節的信息 ;直接抄進RadAsm可編譯運行。…

MongoDB vs Redis:相似與區別

前言 在當今的數據庫領域&#xff0c;MongoDB 和 Redis 都是備受關注的非關系型數據庫&#xff08;NoSQL&#xff09;&#xff0c;它們各自具有獨特的優勢和適用場景。本文將深入探討 MongoDB 和 Redis 的特點&#xff0c;并詳細對比它們之間的相似之處和區別&#xff0c;幫助…

mybatis(19/134)

大致了解了一下工具類&#xff0c;自己手敲了一邊&#xff0c;java的封裝還是真的省去了很多麻煩&#xff0c;封裝成一個工具類就可以不用寫很多重復的步驟&#xff0c;一個工廠對應一個數據庫一個environment就好了。 mybatis中調用sql中的delete占位符里面需要有字符&#xf…

重學SpringBoot3-WebClient配置與使用詳解

更多SpringBoot3內容請關注我的專欄&#xff1a;《SpringBoot3》 期待您的點贊??收藏評論 重學SpringBoot3-WebClient配置與使用詳解 1. 簡介2. 環境準備 2.1 依賴配置 3. WebClient配置 3.1 基礎配置3.2 高級配置3.3 retrieve()和exchange()區別 4. 使用示例 4.1 基本請求操…

.Net Core微服務入門全紀錄(二)——Consul-服務注冊與發現(上)

系列文章目錄 1、.Net Core微服務入門系列&#xff08;一&#xff09;——項目搭建 2、.Net Core微服務入門全紀錄&#xff08;二&#xff09;——Consul-服務注冊與發現&#xff08;上&#xff09; 3、.Net Core微服務入門全紀錄&#xff08;三&#xff09;——Consul-服務注…

Spark Streaming的核心功能及其示例PySpark代碼

Spark Streaming是Apache Spark中用于實時流數據處理的模塊。以下是一些常見功能的實用PySpark代碼示例&#xff1a; 基礎流處理&#xff1a;從TCP套接字讀取數據并統計單詞數量 from pyspark import SparkContext from pyspark.streaming import StreamingContext# 創建Spar…

深度學習系列75:sql大模型工具vanna

1. 概述 vanna是一個可以將自然語言轉為sql的工具。簡單的demo如下&#xff1a; !pip install vanna import vanna from vanna.remote import VannaDefault vn VannaDefault(modelchinook, api_keyvanna.get_api_key(my-emailexample.com)) vn.connect_to_sqlite(https://va…