利用 Object.defineProperty 對象響應式原理實現時鐘效果

 實現代碼💻:

<body>

  <div id="#app"></div>

<script>
  // TODO 定義一個對象響應式原理 ⏰

  function defineReactive(obj, key, val) {
    Object.defineProperty(obj, key, {
      get() {
        // console.log('Get方法:', val)
        return val
      },
      set(newVal) {
        if (val !== newVal) {
          val = newVal
          // console.log('Set方法:', val)
          update(val)
        }
      }
    })
  }

  // 更新函數
  function update(val) {
    document.getElementById('#app').innerHTML = val
  }

  var obj = {}
  // 將obj.foo 註冊爲響應式
  defineReactive(obj, 'foo', '初始值')
  // 設置初始值
  obj.foo = new Date().toLocaleTimeString()
  // 每一秒觸發一次對象的set,並更新視圖View
  setInterval(() => {
    obj.foo = new Date().toLocaleTimeString()
  }, 1000)

</script>
</body>

 

實現效果🤥: 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章