vue中 v-model实现的底层原理 js篇

732 阅读1分钟

我们用原生的js模拟其底层原理:

<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>原生js模拟vue中简单的v-model</title>
</head>

<body>
  <p></p>
  <button id="update">修改按钮</button>
  <button id="get">获取按钮</button>
  <script>
    let obj = { name: '张三' }
    Object.defineProperty(obj, 'str', {
      get() {
        return obj.name
      },
      set(newVal) {
        obj.name = newVal
        console.log(newVal);
        document.querySelector('p').innerHTML = newVal
      }
    })

    document.querySelector('#get').onclick = function () {
      document.querySelector('p').innerHTML = obj.name
    }
    document.querySelector('#update').onclick = function () {
      obj.str = '李四'
    }
  </script>
</body>

</html>

image.png

v-model 本质是就是 v-bind 和 v-on 的语法糖 .