最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

vue3.0中的雙向數(shù)據(jù)綁定方法及優(yōu)缺點

 更新時間:2019年08月01日 16:39:55   作者:智子  
這篇文章主要介紹了vue3.0中的雙向數(shù)據(jù)綁定方法 ,文中通過實例代碼給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下

熟悉vue的人都知道在vue2.x之前都是使用object.defineProperty來實現(xiàn)雙向數(shù)據(jù)綁定的

而在vue3.0中這個方法被取代了

1. 為什么要替換Object.defineProperty

替換不是因為不好,是因為有更好的方法使用效率更高

Object.defineProperty的缺點:

1. 在Vue中,Object.defineProperty無法監(jiān)控到數(shù)組下標的變化,

導致直接通過數(shù)組的下標給數(shù)組設(shè)置值,不能實時響應。

push()
pop()
shift()
unshift()
splice()
sort()
reverse()

2. Object.defineProperty只能劫持對象的屬性,因此我們需要對每個對象的每個屬性進行遍歷。

Vue里,是通過遞歸以及遍歷data對象來實現(xiàn)對數(shù)據(jù)的監(jiān)控的,

如果屬性值也是對象那么需要深度遍歷,顯然如果能劫持一個完整的對象,不管是對操作性還是性能都會有一個很大的提升。

而要取代它的Proxy有以下兩個優(yōu)點:

1. 可以劫持整個對象,并返回一個新對象
2. 有13種劫持操作

2. 什么是Proxy

Proxy是 ES6 中新增的一個特性,翻譯過來意思是"代理",用在這里表示由它來“代理”某些操作。 Proxy 讓我們能夠以簡潔易懂的方式控制外部對對象的訪問。其功能非常類似于設(shè)計模式中的代理模式。

Proxy 可以理解成,在目標對象之前架設(shè)一層“攔截”,外界對該對象的訪問,都必須先通過這層攔截,因此提供了一種機制,可以對外界的訪問進行過濾和改寫。

使用 Proxy 的核心優(yōu)點是可以交由它來處理一些非核心邏輯(如:讀取或設(shè)置對象的某些屬性前記錄日志;設(shè)置對象的某些屬性值前,需要驗證;某些屬性的訪問控制等)。 從而可以讓對象只需關(guān)注于核心邏輯,達到關(guān)注點分離,降低對象復雜度等目的。

基本用法:

let p = new Proxy(target, handler);

參數(shù):

target: 是用Proxy包裝的被代理對象(可以是任何類型的對象,包括原生數(shù)組,函數(shù),甚至另一個代理)。
handler: 是一個對象,其聲明了代理target 的一些操作,其屬性是當執(zhí)行一個操作時定義代理的行為的函數(shù)。

p是Proxy對象,當其他操作對p進行更改的時候,會執(zhí)行handler對象的方法。Proxy有13種數(shù)據(jù)劫持的操作,常用的handler處理方法:

get: 讀取值,
set: 獲取值,
has: 判斷對象是否擁有該屬性,
construct: 構(gòu)造函數(shù)

舉個例子:

let obj = {};
 let handler = {
  get(target, property) {
  console.log(`${property} 被讀取`);
  return property in target ? target[property] : 3;
  },
  set(target, property, value) {
  console.log(`${property} 被設(shè)置為 ${value}`);
  target[property] = value;
  }
 }
 let p = new Proxy(obj, handler);
 p.name = 'tom' //name 被設(shè)置為 tom
 p.age; //age 被讀取 3

更多的Proxy屬性方法參考MDN Proxy

3. Proxy實現(xiàn)數(shù)據(jù)劫持

observe(data) {
 const that = this;
 let handler = {
  get(target, property) {
   return target[property];
  },
  set(target, key, value) {
   let res = Reflect.set(target, key, value);
   that.subscribe[key].map(item => {
    item.update();
   });
   return res;
  }
 }
 this.$data = new Proxy(data, handler);
}

這段代碼里把代理器返回的對象代理到this.$data,即this.$data是代理后的對象,外部每次對this.$data進行操作時,實際上執(zhí)行的是這段代碼里handler對象上的方法。

注:這兒用到了reflect屬性,這也是ES6里面的,不知道的去這兒看看吧。reflect屬性

總結(jié)

以上所述是小編給大家介紹的vue3.0中的雙向數(shù)據(jù)綁定方法及優(yōu)缺點,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • Vue中provide、inject詳解以及使用教程

    Vue中provide、inject詳解以及使用教程

    provide和inject主要為高階插件/組件庫提供用例,并不推薦直接用于應用程序代碼中,下面這篇文章主要給大家介紹了關(guān)于Vue中provide、inject詳解以及使用的相關(guān)資料,需要的朋友可以參考下
    2022-11-11
  • vue watch監(jiān)聽對象及對應值的變化詳解

    vue watch監(jiān)聽對象及對應值的變化詳解

    下面小編就為大家分享一篇vue watch監(jiān)聽對象及對應值的變化詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Vue Element前端應用開發(fā)之echarts圖表

    Vue Element前端應用開發(fā)之echarts圖表

    在我們做應用系統(tǒng)的時候,往往都會涉及圖表的展示,綜合的圖表展示能夠給客戶帶來視覺的享受和數(shù)據(jù)直觀體驗,同時也是增強客戶認同感的舉措之一
    2021-05-05
  • Vue.js一個文件對應一個組件實踐

    Vue.js一個文件對應一個組件實踐

    Vue.js實現(xiàn)"一個文件對應一個組件",無需webpack等工具,按需加載組件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-10-10
  • vue-cli項目修改文件熱重載失效的解決方法

    vue-cli項目修改文件熱重載失效的解決方法

    今天小編就為大家分享一篇vue-cli項目修改文件熱重載失效的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • Vue異步加載about組件

    Vue異步加載about組件

    這篇文章主要為大家詳細介紹了Vue異步加載about組件的相關(guān)方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • vue項目適配大屏端的方法示例

    vue項目適配大屏端的方法示例

    眾所周知在vue移動端h5頁面當中,適配是經(jīng)常會遇到的問題,這篇文章主要給大家介紹了關(guān)于vue項目適配大屏端的相關(guān)資料,需要的朋友可以參考下
    2021-08-08
  • 用vue實現(xiàn)注冊頁效果?vue實現(xiàn)短信驗證碼登錄

    用vue實現(xiàn)注冊頁效果?vue實現(xiàn)短信驗證碼登錄

    這篇文章主要為大家詳細介紹了用vue實現(xiàn)注冊頁,短信驗證碼登錄,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • vuex中Getter的用法詳解

    vuex中Getter的用法詳解

    這篇文章主要給大家介紹了關(guān)于Vuex中Getter的基本使用教程,getter相當于Vuex中的計算屬性 對 state 做處理再返回,本文通過示例代碼將Getter介紹的非常詳細,需要的朋友可以參考下
    2021-07-07
  • vue3+vite使用vite-plugin-svg-icons插件顯示本地svg圖標的方法

    vue3+vite使用vite-plugin-svg-icons插件顯示本地svg圖標的方法

    這篇文章主要介紹了vue3+vite使用vite-plugin-svg-icons插件顯示本地svg圖標的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-12-12

最新評論

塔城市| 甘德县| 金塔县| 永泰县| 嘉荫县| 日照市| 汽车| 塔城市| 邵阳县| 土默特左旗| 屯门区| 武定县| 昌都县| 平泉县| 渝北区| 陆川县| 惠来县| 泽库县| 磐安县| 财经| 孙吴县| 泾阳县| 钟祥市| 银川市| 西吉县| 温泉县| 涟水县| 武强县| 赣榆县| 马边| 锡林郭勒盟| 本溪市| 镇宁| 保山市| 德化县| 聊城市| 永善县| 青川县| 樟树市| 兴化市| 浦北县|