Vue前端开发学习之——Vue双向数据绑定的原理②

Vue 数据双向绑定的原理

核心:数据代理+发布订阅

  • 描述: 当把一个普通的JavaScript对象传给Vue实例的data选项,Vue将遍历此对象所有的属性,使用Object.defineProperty把这些属性全部转为 getter/setter(数据劫持/数据映射)。在属性被访问和修改时通知变化。每个组件实例都有相应的watcher实例对象,它会在组件渲染的过程中把属性记录为依赖,之后当依赖项的setter被调用时,会通知watcher重新计算,从而致使它关联的组件得以更新。

Object.defineProperty(obj,prop,descriptor)

  • obj : 要定义属性的对象
  • prop:要定义或修改的属性的名称
  • descriptor:要定义选项
<body>
  <div id="app">
    <div id="msg"></div>
    <input type="text" oninput="changeVal(this)">
  </div>
</body>
<script src="./node_modules/vue/dist/vue.js"></script>
<script>
  // 1.定义对象
  let userInfo = {
     
     
    name: "这个信息虽然用户看不到,但是vue可以追踪到",
  }
  // 2.数据劫持
  let obj = {
     
     }
  //要定义属性的对象,要定义或修改的属性的名称,要定义选项
  Object.defineProperty(obj, "name", {
     
     
    get() {
     
     
      return userInfo.name
    },
    set(data) {
     
     
      userInfo.name = data
      document.getElementById("msg").innerHTML = data
      return true
    }
  })
  // 3.实时渲染
  document.getElementById("msg").innerHTML = obj.name

  // 4.发布订阅
  function changeVal(eleObj) {
     
     
    let value = eleObj.value
    obj.name = value
    return true
  }

</script>

猜你喜欢

转载自blog.csdn.net/weixin_53985543/article/details/115010328