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

淺談vue實(shí)現(xiàn)數(shù)據(jù)監(jiān)聽的函數(shù) Object.defineProperty

 更新時(shí)間:2017年06月08日 17:06:20   作者:苦練內(nèi)功  
本篇文章主要介紹了淺談vue實(shí)現(xiàn)數(shù)據(jù)監(jiān)聽的函數(shù) Object.defineProperty,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

在 ES5中新增了不少新的API, 例如  新增了 Object.xxx相關(guān)的方法,其中有一個(gè)定義屬性相關(guān)的 Object.defineProperty 這個(gè)方法(還有Object.defineProperties)這個(gè)方法是 vue框架實(shí)現(xiàn)數(shù)據(jù)監(jiān)聽的核心方法,它的定義如下:

Object.defineProperty([Object] obj, [String] propname, [Object] desp )

  1. @param  obj  要配置屬性的某個(gè)對(duì)象
  2. @param propname 要配置的屬性名,是一個(gè)字符串
  3. @param desp 對(duì)屬性的描述,是一個(gè)對(duì)象,

desp 中可以配置的項(xiàng)目 

<1> writable:  true/false 是否可寫

<2> configurable : true/false 是否可以配置,例如刪除該屬性

<3> enumerable: true/false 指的是是否可以使用 for in循環(huán)遍歷屬性

<4> value:  值  ,屬性的值

我們?cè)趯憊ue項(xiàng)目的時(shí)候會(huì)在 data屬性中添加我們自己的屬性,這個(gè)屬性在vue中是響應(yīng)式的,也就是它可以監(jiān)聽到數(shù)據(jù)的變化,做出相應(yīng)的改變(例如DOM操作)

我們自己利用 defineProperty給屬性生成setter和getter(也就是其他編程語言里的存取器),就可以達(dá)到監(jiān)聽數(shù)據(jù)變化的目的

下面我們來自己實(shí)現(xiàn)一個(gè)數(shù)據(jù)監(jiān)聽的小 demo

有如下的數(shù)據(jù)

  let vue = {
   data: {
    title: 'life style',
    content: 'bike walk sleep...'
   }
  };

已經(jīng)提前聲明的 data屬性及其內(nèi)部的屬性,我們的目標(biāo)是監(jiān)聽 data中,title和content的變化

如何做到呢? 屬性的個(gè)數(shù)是不確定的,所以我們可以使用 for in循環(huán)遍歷data對(duì)象的所有的屬性

  //如何監(jiān)聽用戶自定義的 data中屬性的改變?
  let data = vue.data;
  for (let prop in data) {
   data['__' + prop] = data[prop]; //存儲(chǔ)私有屬性
   Object.defineProperty(data, prop, {
    enumerable : true,
    set: function (newVal) {
     console.log('你正在修改'+prop + ' !...操作DOM...');
     // 數(shù)據(jù)校驗(yàn)
     this['__' + prop] = newVal;
    },
    get: function () {
     console.log('getter 獲取值 ...');
     return this['__' + prop];
    }
   });
  }

遍歷data屬性的時(shí)候調(diào)用 defineProperty來給data對(duì)象的屬性添加set和get方法,

我們給data添加一個(gè)新的屬性   __xxx來保存我們之前的值,以便在 get方法中獲取原來的值

set方法 用于監(jiān)聽這個(gè)屬性被重新賦值,

get方法用于獲取你想要的格式的值

此處需要注意的是 不要在 set和get中 使用this賦值或者取值,這樣會(huì)導(dǎo)致循環(huán)調(diào)用,出現(xiàn)問題!!!

另外 我們不要使用 var,而要使用 let ,因?yàn)関ar不是塊作用域, 會(huì)導(dǎo)致你最后訪問到的prop總是最后一個(gè)

定義好之后,我們可以修改 data中title和content屬性了,

當(dāng)我們給 title賦值的時(shí)候回自動(dòng)調(diào)用 set, 獲取值得時(shí)候自動(dòng)調(diào)用get

測試代碼

  // 賦值操作會(huì)調(diào)用這個(gè)屬性的set方法, 類似于 set('aaa')
  data.title = 'aaa';
  // 獲取值操作會(huì)調(diào)用這個(gè)屬性的get方法
  console.log(data.title);
  data.content = 123;
  // 此種動(dòng)態(tài)屬性方式也會(huì)觸發(fā) set / get
  data['title'] = 123;
  console.log(data['title']);

結(jié)果(建議在最新版的chrome中操作):

對(duì)剛剛的遍歷方法還存在一些問題和說明:

1.data屬性的某個(gè)屬性可能還是對(duì)象,也就是存在多層級(jí)對(duì)象監(jiān)聽的問題

此時(shí)可以使用遞歸函數(shù)遍歷data的屬性,進(jìn)行相同操作

2. 通過  data.title = 1是實(shí)際上是調(diào)用了 set方法, 這個(gè)類似于 OC中的點(diǎn)語法

3. 要同時(shí)定義多個(gè)屬性,可以使用

Object.defineProperties([Object] obj, [Object] props);

需要注意的是, 本文只是介紹 defineProperty的基本使用,并非代表vue的代碼實(shí)現(xiàn)

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue 開發(fā)之路由配置方法詳解

    vue 開發(fā)之路由配置方法詳解

    這篇文章主要介紹了vue 開發(fā)之路由配置方法,結(jié)合實(shí)例形式詳細(xì)分析了了vue.js路由原理、配置方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2019-12-12
  • Vue中輸入框僅支持?jǐn)?shù)字輸入的四種方法

    Vue中輸入框僅支持?jǐn)?shù)字輸入的四種方法

    項(xiàng)目中需要用到大量的數(shù)字輸入框限制,為了可以以后能又更多的拓展性,下面這篇文章主要給大家介紹了關(guān)于Vue中輸入框僅支持?jǐn)?shù)字輸入的四種方法,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2024-08-08
  • vue3輸入單號(hào)和張數(shù)如何自動(dòng)生成連號(hào)的單號(hào)

    vue3輸入單號(hào)和張數(shù)如何自動(dòng)生成連號(hào)的單號(hào)

    最近遇到這樣的需求輸入連號(hào)事件,需要在表格中輸入物流單號(hào),物流號(hào)碼,生成的數(shù)量,名稱,點(diǎn)擊確定自動(dòng)生成固定數(shù)量的連號(hào)物流單號(hào),本文重點(diǎn)介紹vue3輸入單號(hào)和張數(shù),自動(dòng)生成連號(hào)的單號(hào),感興趣的朋友一起看看吧
    2024-02-02
  • VUE接入騰訊驗(yàn)證碼功能(滑塊驗(yàn)證)備忘

    VUE接入騰訊驗(yàn)證碼功能(滑塊驗(yàn)證)備忘

    這篇文章主要介紹了VUE接入騰訊驗(yàn)證碼功能(滑塊驗(yàn)證)備忘,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2019-05-05
  • Vue中正確使用jQuery的方法

    Vue中正確使用jQuery的方法

    這篇文章主要為大家詳細(xì)介紹了Vue中正確使用jQuery的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-10-10
  • Vue 使用 Mint UI 實(shí)現(xiàn)左滑刪除效果CellSwipe

    Vue 使用 Mint UI 實(shí)現(xiàn)左滑刪除效果CellSwipe

    這篇文章主要介紹了Vue 使用 Mint UI 實(shí)現(xiàn)左滑刪除效果CellSwipe,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下
    2018-04-04
  • Vue實(shí)現(xiàn)生成本地Json文件功能方式

    Vue實(shí)現(xiàn)生成本地Json文件功能方式

    這篇文章主要介紹了Vue實(shí)現(xiàn)生成本地Json文件功能方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • Vue3中使用ref與reactive創(chuàng)建響應(yīng)式數(shù)據(jù)的示例代碼

    Vue3中使用ref與reactive創(chuàng)建響應(yīng)式數(shù)據(jù)的示例代碼

    這篇文章主要介紹了Vue3中使用ref與reactive創(chuàng)建響應(yīng)式數(shù)據(jù)的方法,文中通過代碼示例講解的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作有一定的幫助,需要的朋友可以參考下
    2024-08-08
  • Vue前端柱狀圖實(shí)例(疊狀條形圖)

    Vue前端柱狀圖實(shí)例(疊狀條形圖)

    這篇文章主要介紹了Vue前端柱狀圖實(shí)例(疊狀條形圖),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-03-03
  • vue+iview的菜單與頁簽的聯(lián)動(dòng)方式

    vue+iview的菜單與頁簽的聯(lián)動(dòng)方式

    這篇文章主要介紹了vue+iview的菜單與頁簽的聯(lián)動(dòng)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07

最新評(píng)論

永德县| 大理市| 郸城县| 东乡族自治县| 葵青区| 藁城市| 迁安市| 巧家县| 吉首市| 察隅县| 阿坝| 页游| 莒南县| 漳州市| 南澳县| 鹤峰县| 宁南县| 阳泉市| 三明市| 孝感市| 黎平县| 兴山县| 尼木县| 彭山县| 大连市| 那坡县| 石首市| 鸡东县| 沂水县| 农安县| 许昌市| 磐石市| 长垣县| 吉安县| 隆昌县| 沈阳市| 成武县| 达日县| 望城县| 棋牌| 滦平县|