object.defineproperty
只能劫持物件的屬性,而proxy
是直接**物件
由於object.defineproperty
只能對屬性進行劫持,需要遍歷物件的每個屬性。而proxy
可以直接**物件。
object.defineproperty
對新增屬性需要手動進行observe
, 由於object.defineproperty
劫持的是物件的屬性,所以新增屬性時,需要重新遍歷物件,對其新增屬性再使用object.defineproperty
進行劫持。 也正是因為這個原因,使用 vue 給data
中的陣列或物件新增屬性時,需要使用vm.$set
才能保證新增的屬性也是響應式的。
proxy
支援13種攔截操作,這是defineproperty
所不具有的。
新標準效能紅利
proxy
作為新標準,長遠來看,js引擎會繼續優化proxy
,但getter
和setter
基本不會再有針對性優化。
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中...