国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

淺談vue中數據雙向綁定的實現原理

2019-11-19 15:26:45
字體:
來源:轉載
供稿:網友

vue中最常見的屬v-model這個數據雙向綁定了,很好奇它是如何實現的呢?嘗試著用原生的JS去實現一下。

首先大致學習了解下Object.defineProperty()這個東東吧!

* Object.defineProperty()    *  對對象的屬性進行 定義/修改    * */    let obj = {x:10}    // 這兩種方式都相對來說比較簡單,直接,但是有些時候我們需要對對象的屬性的修改和增加進行必要的干預//    obj.y = 20;//    obj.x = 100;//    obj.x = 'abc';////    let arr = [1,2,3];//    arr.length = 'abc';//不可更改//    console.log(arr);//    console.log(obj.x);//    delete obj.x;//    console.log(obj);    Object.defineProperty(obj, 'y', {      configurable: false,  //設置是否可刪除 false為不可刪除      value: 100    });    console.log(obj);    delete obj.y;//刪除    console.log(obj);    //設置對象某個屬性值的時候,順便設置它的屬性。enumerable 可枚舉 configurable 可以刪除否 writable 可改值否    Object.defineProperty(obj, 'z', {//enumerable 可枚舉(沒有則新添加)       enumerable: true,//為false時,for..in object.keys json.stringfy 不能取到該z屬性      value: 10000    });    for (var attr in obj) {      console.log(attr);    }    Object.defineProperty(obj, 'm', {      writable: false,//可更改      value: 9    });    console.log(obj);    obj.m = 100;    console.log(obj);

以上總結了對象的defineProperty四個屬性:configurable,enumerable,value,writable

接下來再深入認識下它的另外兩個方法:set 以及get

注意:get和set不能與configurable,enumerable,value,writable同時存在

let obj = {x:10}    let y = 100;    Object.defineProperty(obj, 'y', {      get() {        //當obj的y屬性被調用的時候觸發,該方法的返回值將作為獲取的結果        console.log('get');        return y;      },      set(value) {        //當obj的y屬性被設置的時候觸發        console.log('set', value);        y = value;      }    })    console.log(obj.y);    obj.y = 1;    console.log(obj.y);

介紹完defineProperty了,最后我們一起看看如何簡單的實現數據雙向綁定吧!

<body>  <input type="text" id="age">  <h1></h1>  <script>    var ageElement = document.querySelector('#age');    var h1Element = document.querySelector('h1');    let obj = {};    Object.defineProperty(obj, 'age', {      get() {      },      set(value) {        ageElement.value = value;        h1Element.innerHTML = value;      }    })    obj.age = 10;    ageElement.oninput = function() {      obj.age = this.value;    }      </script>

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 穆棱市| 吉首市| 汾西县| 天气| 花垣县| 城步| 龙南县| 苍南县| 江都市| 基隆市| 卓资县| 曲沃县| 永清县| 岫岩| 沾益县| 安宁市| 长乐市| 新密市| 鹤山市| 砚山县| 馆陶县| 阳山县| 二连浩特市| 岫岩| 张家港市| 安仁县| 玛纳斯县| 永丰县| 寿光市| 勐海县| 五华县| 辽宁省| 花垣县| 吉林省| 山西省| 垫江县| 大同市| 利津县| 宜良县| 开远市| 红原县|