使用Proxy和Reflect实现简单的双向数据绑定

本文介绍了如何利用JavaScript中的Proxy和Reflect API来实现简单的双向数据绑定。讲解了Proxy的基本语法,列举了在双向绑定中用到的Proxy方法和Reflect方法,并给出了具体实现双向绑定的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Proxy基本语法

const obj = new Proxy(target, handler);
其中target为被代理的对象,handler为对象,声明了代理target的一些操作。

用到的Proxy方法
  1. get(target, propKey, receiver)
    target: 目标对象。
    propKey: 目标对象的属性。
    receiver: (可选),该参数为上下文this对象
  2. set(target, propKey, value, receiver)
    target: 目标对象。
    propKey: 目标对象的属性名
    value: 属性值
    receiver(可选): 一般情况下是Proxy实列
用到的Reflect方法
  1. Reflect.get(target, name, receiver)查找并返回target对象的name属性,如果没有该属性,则返回undefined。
  2. Reflect.set(target, name, value, receiver)设置target对象的name属性等于value。
简单实现数据双向绑定
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <input type="text" id="inputs" value="hello"/>
    <p id="show">hello</p>
    <script>
        let oInput = document.querySelector('#inputs')
        let oShow = document.querySelector('#show')

        let obj = {}
        let handler = {
            get: (obj, key, val) =>{
                console.log(`get ${key}`)
               return Reflect.get(obj, key)
            },
            set: (obj, key, val) => {
                console.log(`set ${key}`)
                if(key === 'text') {
                    oShow.innerHTML = val
                }
               return Reflect.set(obj, key, val)
            }
        }
        let proxy = new Proxy(obj, handler)
        oInput.onkeyup = (e) => {
            proxy.text = e.target.value
            console.log(proxy.text)
        }
    </script>
  </body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值