欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

javascript用defineProperty實現簡單的雙向綁定方法

 更新時間:2020年04月03日 11:06:35   作者:張磊  
這篇文章主要介紹了javascript用defineProperty實現簡單的雙向綁定方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

defineProperty

Object提供的方法,用于給對象添加自定義屬性具體用法如下:

const obj = { _value: 1 };

Object.defineProperty(obj, 'value', {
  get: function() {
    console.log('get方法執(zhí)行');
    return this._value;
  },
  set: function(a) {
    console.log('set方法執(zhí)行');
    this._value = a;
  }
})
obj.value = 3;
console.log(obj.value);
console.log(obj._value);

在node中執(zhí)行結果如下:

下面來分析一下代碼
首先定一個對象,并對對象添加一個自定義屬性value,同時添加了getter,setter兩個函數用來分別控制value屬性的修改和獲取,
當執(zhí)行obj.value = 3;時,會自動調屬性的setter方法,將value的修改同步到_value屬性上,當執(zhí)行obj.value語句獲取屬性值時,會自動調用getter方法獲取方法的返回值;

總結 (參考MDN)
該方法接收三個參數
obj:要添加屬性的對象
prop: 要定義的屬性
descriptor:要定義或者修改的屬性描述符
其中描述符包含以下幾種

1.configurable:布爾值,控制屬性是否能改變(除了value,writable)及刪除
2.enumerable: 布爾值,控制屬性是否可枚舉,即通過for in循環(huán)或者Object.keys訪問
3.value:屬性值,可以時任何有效JavaScript值
4.writable 布爾值,屬性可否通過賦值修改
5.get:屬性getter函數,執(zhí)行時傳入this,this值取決于調用者
6.set:屬性setter函數,賦值時執(zhí)行,并傳入this

雙向綁定

由此可以設計一下數據雙向綁定的簡單實現:
在數據對象內定義屬性,通過對dom綁定事件監(jiān)聽dom內值的變化,并賦值給數據對象,數據對象的改動會調用自身的setter方法,在方法內在動態(tài)修改dom內容。

代碼如下:

<!-- 簡單數據雙向綁定實現 -->
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <div id="root">
      <button id='btn'>請求數據</button>
    </div>
  </body>
  <script>
    const root = document.getElementById('root');
    const btn = document.getElementById('btn');
    const input = document.createElement('input');
    const model = document.createElement('p');
    const dataModel = {
      _value:0,
    }
    Object.defineProperty(dataModel, 'value', {
      configurable: true,
      set:function(value){
        this._value = value;
        input.value = value;
        model.innerHTML = `<span>數據模型:</sapn> ${value}`;
      },
      get:function(){
        return this._value;
      }
    })

    btn.addEventListener('click', () => {
      const range = Math.floor(Math.random(0, 1) * 100);
      dataModel.value = range;
    })

    input.addEventListener('input',(ev) => {
      dataModel.value = ev.target.value;
    })

    const initPage = () => {
      dataModel.value = 100;
    }
    initPage();
    root.append(input);
    root.append(model);
  </script>
</html>

描述有點亂,看實現代碼更清晰一點,有問題歡迎指正

到此這篇關于javascript用defineProperty實現簡單的雙向綁定方法的文章就介紹到這了,更多相關javascript defineProperty雙向綁定內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • JS實現點擊Radio動態(tài)更新table數據

    JS實現點擊Radio動態(tài)更新table數據

    這篇文章主要介紹了JS實現點擊Radio動態(tài)更新table數據的相關資料,需要的朋友可以參考下
    2017-07-07
  • 微信小程序使用slider實現音頻進度條

    微信小程序使用slider實現音頻進度條

    這篇文章主要為大家詳細介紹了微信小程序使用slider實現音頻進度條,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-06-06
  • uni-file-picker文件選擇上傳功能實現

    uni-file-picker文件選擇上傳功能實現

    這篇文章主要介紹了uni-file-picker文件選擇上傳,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • JS閉包經典實例詳解

    JS閉包經典實例詳解

    這篇文章主要介紹了JS閉包,結合一個經典實例較為詳細的分析了javascript閉包的原理及使用方法,需要的朋友可以參考下
    2018-12-12
  • js實現仿Windows風格選項卡和按鈕效果實例

    js實現仿Windows風格選項卡和按鈕效果實例

    這篇文章主要介紹了js實現仿Windows風格選項卡和按鈕效果的方法,可實現類似windows選項卡風格的tab標簽效果,需要的朋友可以參考下
    2015-05-05
  • Javascript仿京東放大鏡的效果

    Javascript仿京東放大鏡的效果

    本文主要介紹了Javascript仿京東放大鏡效果的實例。具有很好的參考價值,下面跟著小編一起來看下吧
    2017-03-03
  • JavaScript實現抽獎器效果

    JavaScript實現抽獎器效果

    這篇文章主要為大家詳細介紹了JavaScript實現抽獎器效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-10-10
  • js判斷運行jsp頁面的瀏覽器類型以及版本示例

    js判斷運行jsp頁面的瀏覽器類型以及版本示例

    做了一個判斷瀏覽器類型和版本號的業(yè)務,記錄下相關的js代碼,個人感覺還不錯,需要的朋友可以參考下
    2013-10-10
  • 優(yōu)化 JavaScript 代碼的方法小結

    優(yōu)化 JavaScript 代碼的方法小結

    客戶端腳本能讓你的應用更加地動態(tài)和活躍, 但是瀏覽器對代碼的解析可能造成效率問題, 而這種性能差異在客戶端之間也不盡相同。 這里我們討論和給出一些優(yōu)化你的 JavaScript 代碼的提示和最佳實踐。
    2009-07-07
  • JavaScript代碼里的判斷小結

    JavaScript代碼里的判斷小結

    在JavaScript代碼中,多多少少會有判斷語句。業(yè)務越復雜,邏輯就越復雜,判斷就越多。今天給大家整理下JavaScript中代碼里常會用到的那些判斷,有需要的可以參考借鑒。
    2016-08-08

最新評論