<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          實(shí)現(xiàn) MVVM 類 Vue 迷你框架(三)

          共 2368字,需瀏覽 5分鐘

           ·

          2021-03-29 21:11

          如何實(shí)現(xiàn) MVVM 類 Vue 迷你框架(三)

          接下來我們需要在上節(jié)課的基礎(chǔ)上,對數(shù)據(jù)進(jìn)行響應(yīng)式處理,大致的框架代碼如下:

          class MVue {
           constructor(options) {
               this.$options = optinos;
                this.$data = options.data();
                
                // 數(shù)據(jù)代理
                proxy(this)
                
                // 對 data 數(shù)據(jù)進(jìn)行響應(yīng)式處理
                observe(this.$data)
             }
          }
          • 定義一個(gè)方法
          function defineReactive(obj, key, val{
           let curVal = val; // 緩存上一次的值
             Object.defineProperty(obj, key, {
               get() {
                    // 需要進(jìn)行依賴收集
                  return curVal;  
                },
                set(newVal) {
                  if(newVal !== curVal) {
                    curVal = newVal;
                     // 當(dāng)值發(fā)生變化的時(shí)候,需要做通知數(shù)據(jù)更新操作
                   }
                }
             })
          }

          那么如何來實(shí)現(xiàn)我們 Observer 類呢,他到底處理什么呢?

          • 遍歷 data 數(shù)據(jù),給數(shù)據(jù)屬性挨個(gè)設(shè)置 setter, getter 屬性
          • 需要分別處理 數(shù)組和對象
          class Observer {
           constructor(val) {
               this.$value = val;
                if(Array.isArray(val)) {
                  // 處理數(shù)組
                } else {
                  // 處理對象
                   // 需要寫一個(gè)方法遍歷
                   this.walk(val)
                }
             }
             // 遍歷對象,響應(yīng)式對象
             walk(obj) {
               Object.keys(key => defineReactive(obj, key, obj[key]))
             }
          }


          瀏覽 45
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  1级操逼视频 | 天天综合网永久入口 | 色五月丁香在线 | 人人看人人插摸 | 欧美性爱视频AAA |