Vue.js的双向绑定原理

Vue的双向绑定

vue双向绑定是其最重要的核心亮点,其原理也很简单,这里做个简单总结

  • vue2的双向绑定是利用的Object.defineProperty
  • vue3的双向绑定是利用的
    ES6Porxy中的defineProperty(target, propKey, propDesc
    其作用类似于Object.defineProperty

下面写一下两种原理的简单代码

  • 用于直观展示双向绑定的视图层(view) html代码

    文档标题

  • vue2的双向绑定

    let obj={
    message:"12"
    }
    Object.defineProperty(obj,"message",{
    get:function(){
    return this._message
    },
    set:function(newValue){
    this._message=newValue
    document.getElementById("output").innerHTML=newValue
    }

    })

    document.getElementById("input").addEventListener('input',(event)=>{
    obj.message=event.target.value
    })

代码主要对对象的set过程进行劫持,将其与view层绑定

  • vue3的双向绑定

    let obj={
    message:"12"
    }
    const newObj=new Proxy(obj,{
    get:function(target,propKey,rev){
    return Reflect.get(target,propKey)
    },
    set:function(target,propKey,value){
    Reflect.set(target,propKey,value)
    document.getElementById("output").innerHTML=value
    }
    })

    document.getElementById("input").addEventListener('input',(event)=>{
    newObj.message=event.target.value
    })

  • 效果
    !

相关推荐
To_OC1 小时前
面试被问了三回三栏布局,这次我终于把 BFC 那层窗户纸捅破了
前端·css·面试
To_OC2 小时前
啃完 TS 工具类型我发现:Pick 和 Omit 原来就是一层窗户纸
前端·面试·typescript
风月说与山鬼3 小时前
三、大括号语法
前端·react.js
kyriewen4 小时前
我把最常踩的8个CORS跨域报错整理了一遍——第8个去年还不存在
前端·javascript
Csvn4 小时前
🕰️ 闭包 + setTimeout 的 5 个经典陷阱:为什么定时器看到的永远不是最新的值?
前端
lilian2334 小时前
Harmony os 技术实战|拼豆制图27:用单字符编码承载 50 张 70×70 图纸
前端·数据库·华为·harmonyos
CarIise5 小时前
CSS选择器与样式关联
前端·css·tensorflow
里欧跑得慢6 小时前
CSS 模块化架构的演进:BEM、CSS Modules 到 CSS-in-JS 的反思
前端·css·flutter·web·css-in-js
IT_陈寒6 小时前
Vue的computed属性把我坑惨了,原来我一直用错姿势
前端·人工智能·后端