Hi FE !
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
Ai
git
前端面试题
前端小tip
  • vite
  • webpack
npm
  • vue2
  • vue3
react
GitHub
  • s007-手写一个数据双向绑定

s007-手写一个数据双向绑定

手写数据双向绑定,vue实现双向绑定的原理就是Object.defineProperty,重写其中的get,set方法
<input id="txt" />
   <p id="show-txt"></p>


   <script>
     var obj = {
       txt: ''
     };
     let newData = { ...obj }
     Object.defineProperty(obj, 'txt', {
       get: () => {
         console.log('读取')
         return obj.txt
       },
       set: (newValue) => {
         console.log('设置', newValue)
         newData.txt = newValue
         document.getElementById("txt").value = newValue;
         document.getElementById("show-txt").innerHTML = newValue;
       },
     })
     document.addEventListener("keyup", function (e) {
       obj.txt = e.target.value;
     })
     obj.txt = 'qdleader'
   </script>

Proxy


const obj = {name:"zs"};
let newData = {...obj};
let proxy = new Proxy(obj,{
    //obj 为目标对象, attr 为对象的属性
    get(obj,attr){ //当我们获取代理对象的属性值是会走这个方法
        return obj[attr]
    },
    // obj为目标对象, attr为属性名, value为属性值
    set(target,attr,value){//当我们设置代理对象的属性值是会走这个方法
        if(attr === "name"){
            // obj[attr] = value
            newData.txt = value
            document.querySelector('#input1').value = value;
            document.querySelector('#box').innerHTML = value;
        }
        //表示成功
         return true
    }
})

proxy.name = 1231


document.addEventListener('keyup',function(e) {
  console.log("e",e)
  proxy.name = e.target.value;
})
Edit this page
最近更新: 2025/6/27 02:24
Contributors: qdleader
qdleader
本站总访问量 129823次 | 本站访客数 12人