Vue3 0為什麼使用Proxy實現雙向繫結

2021-10-04 23:10:22 字數 998 閱讀 8757

object.defineproperty只能劫持物件的屬性,而proxy是直接**物件

由於object.defineproperty只能對屬性進行劫持,需要遍歷物件的每個屬性。而proxy可以直接**物件。

object.defineproperty對新增屬性需要手動進行observe, 由於object.defineproperty劫持的是物件的屬性,所以新增屬性時,需要重新遍歷物件,對其新增屬性再使用object.defineproperty進行劫持。 也正是因為這個原因,使用 vue 給data中的陣列或物件新增屬性時,需要使用vm.$set才能保證新增的屬性也是響應式的。

proxy支援13種攔截操作,這是defineproperty所不具有的。

新標準效能紅利

proxy作為新標準,長遠來看,js引擎會繼續優化proxy,但gettersetter基本不會再有針對性優化。

proxy相容性差 目前並沒有乙個完整支援proxy所有攔截方法的polyfill方案

為什麼Proxy被vue選中

1.先看下定義 proxy 可以理解成,在目標物件之前架設一層 攔截 外界對該物件的訪問,都必須先通過這層攔截,因此提供了一種機制,可以對外界的訪問進行過濾和改寫。proxy 這個詞的原意是 用在這裡表示由它來 某些操作,可以譯為 器 語法 let pro newproxy target,handl...

Vue3 0系列(Vue3 0是如何變快的 )

來說一說為什麼performance 效能比vue 2.x快1.2 2倍 這裡先提供兩個 2.1 diff演算法優化 例子 我是段落 也就是說,vue3在渲染的時候,給會改變的元素新增了靜態標記 import from vue export function render ctx,cache,pro...

快速上手vue3 0

安裝最新vue腳手架 npm i vue cli g 通過腳手架建立專案,並選擇3.0 vue create vue next 執行專案 npm run serve vue2.0採用的叫做選項式api 例如我們想實現某乙個功能,關於這個功能的資料我們會定義在data中,事件函式定義在methods中...