91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中怎么實現實現一個簡單得數據響應系統

發布時間:2021-11-08 13:35:20 來源:億速云 閱讀:125 作者:iii 欄目:開發技術

這篇文章主要介紹“Java中怎么實現實現一個簡單得數據響應系統”,在日常操作中,相信很多人在Java中怎么實現實現一個簡單得數據響應系統問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java中怎么實現實現一個簡單得數據響應系統”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

1、Dep

其實,這就是一個依賴收集的容器, depend 收集依賴, notify 觸發依賴

class Dep{
  constructor() {
    this._subs = [];
  }
  depend () {
    this._subs.push(Dep.target)
  }
  notify() {
    this._subs.forEach(item => {
      item.fn();
    })
  }
}

// 其實就是 dep 和 watcher 基情滿滿的開始,watcher 中用到
// 通過一個全局屬性來存 watcher
Dep.target = null;

function pushTarget(watch) {
  Dep.target = watch;
}

function popTarget() {
  Dep.target = null;
}

2、了解 obverser

遞歸,將 data 對象所有屬性轉化為訪問器屬性

// 轉為訪問器屬性
function defineReactive (obj, key, val, shallow) {

  // 創建一個依賴收集容器
  let dep = new Dep();
  let childOb = !shallow && observe(val)

  Object.defineProperty(obj, key, {
    enumerable: true,
    configurable: true,
    get: function reactiveGetter () {
      if(Dep.target) {
        // 收集依賴
        dep.depend();
      }
      return val;
      // ...
    },
    set: function reactiveSetter (newVal) {
      if(newVal === val) return;
      // 繼續遞歸遍歷
      observe(newVal);
      // 觸發依賴
      dep.notify();
      // ...
    }
  })
}

class Observer{
  constructor(data) {
    this.walk(data);
  }

  walk(data) {
    const keys = Object.keys(data)
    for (let i = 0; i < keys.length; i++) {
      defineReactive(data, keys[i], data[keys[i]])
    }
  }
}

// 遞歸,將 data 對象所有屬性轉化為訪問器屬性
function observe (data) {
  if(Object.prototype.toString.call(data) !== '[object Object]') return;
  new Observer(data);
}

此時就可以把任意一個對象的全部屬性轉為訪問器

3、了解 watch 和 observer

const data = {
  a: 1,
  b: 2
}

// 首先監控一個對象
observe(data);

watcher 的主要功能是檢測某個屬性,當屬性變化時觸發一個回調

class Watcher{
  /**
  * @params {Function} exp 一個屬性表達式
  * @params {Function} fn 回調
  */
  constructor(exp, fn) {
    this.exp = exp;
    this.fn = fn;

    // 存 watcher
    // Dep.target = this;
    pushTarget(this);

    // 先執行一次表達式函數,會在調用過程中,
    // 觸發到 data.a 的訪問器, data.a 的 get 被執行,
    // 觸發 dep.depend() 開始收集依賴
    this.exp();

    // 釋放 Dep.target
    popTarget();
  }
}

// new Watcher 這樣一個依賴就被收集了
new Watcher(() => {
  return data.a + data.b;
}, () => {
  console.log('change')
})

4、觸發依賴

data.a = 3; // change
data.b = 3; // change

到此,關于“Java中怎么實現實現一個簡單得數據響應系統”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

宜宾市| 塘沽区| 瑞昌市| 白朗县| 滕州市| 张北县| 四平市| 永德县| 庆安县| 独山县| 页游| 四子王旗| 金昌市| 慈溪市| 嘉黎县| 石嘴山市| 孟连| 阳高县| 巢湖市| 祥云县| 礼泉县| 佛坪县| 屏东县| 方正县| 秭归县| 泰来县| 叙永县| 汉沽区| 博野县| 兴国县| 正宁县| 漾濞| 翼城县| 柳江县| 博湖县| 鄂温| 迁西县| 溧水县| 西充县| 双辽市| 土默特右旗|