美文网首页Vue 3.x
模拟 Vue3.x 响应式原理

模拟 Vue3.x 响应式原理

作者: 阿畅_ | 来源:发表于2020-09-14 10:46 被阅读0次
    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF-8">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>Proxy</title>
    </head>
    <body>
      <div id="app">
        hello
      </div>
      <script>
        // 模拟 Vue 中的 data
        let data = {
          msg: 'hello',
          count: 10
        }
        // 模拟 Vue 实例
        let vm = new Proxy(data, {
          // 执行代理行为的函数 访问 vm 的成员会执行
          get(target, key) {
            console.log('target, key ------>', target, key)
            return target[key]
          },
    
          set(target, key, newVal) {
            console.log('set, key ------->', key, newVal)
            if (target[key] === newVal) {
              return
            }
            target[key] = newVal
            document.querySelector('#app').textContent = target[key]
          }
        })
    
        vm.msg = 'hello world'
        console.log(vm.msg)
      </script>
    </body>
    </html>
    

    proxy 直接可以代理整个对象,而 defineProperty 需要手动循环代理每个对象里的每个属性

    相关文章

      网友评论

        本文标题:模拟 Vue3.x 响应式原理

        本文链接:https://www.haomeiwen.com/subject/iwnaektx.html