Vue.js的双向绑定原理

Vue的双向绑定

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

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

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

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

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>文档标题</title> </head> <body>

    </body> </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
    })

  • 效果
    !

相关推荐
索迪迈科技8 分钟前
CommonJS与ES6模块的区别
前端·ecmascript·es6
前端Hardy10 分钟前
12个被低估的 CSS 特性,让前端开发效率翻倍!
前端·javascript·css
前端Hardy19 分钟前
HTML&CSS:精美的3D折叠卡片悬停效果
前端·javascript·css
nightunderblackcat19 分钟前
新手向:中文语言识别的进化之路
前端·javascript·easyui
Spider_Man1 小时前
打造属于你的前端沙盒 🎉
前端·typescript·github
用户47949283569151 小时前
🤫 你不知道的 JavaScript:`"👦🏻".length` 竟然不是 1?
前端·javascript·面试
掘金一周1 小时前
凌晨零点,一个TODO,差点把我们整个部门抬走 | 掘金一周 9.11
前端·人工智能·后端
用户8174413427481 小时前
kubernetes核心概念 Service
前端
xingkongv1 小时前
从“调接口仔”到“业务合伙人”:前端的 DDD 初体验
javascript·前端框架
东北南西1 小时前
Web Worker 从原理到实战 —— 把耗时工作搬到后台线程,避免页面卡顿
前端·javascript