第 74 题: 使用 JavaScript Proxy 实现简单的数据绑定
Proxy 这个词的原意是代理,用在这里表示由它来 代理 某些操作,可以译为 代理器,可以理解成,在目标对象之前架设一层 拦截,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(15)
model.value = value; 这一行代码是不是不需要写
监听dom的value变化 去更新 obj
obj的数据发生变化 去更新 dom
普通简易版本:
proxy版本 好像没啥特殊的:
可打开f12修改
data.name
查看改变情况set 方法必须返回 true 或者 false 你这样写是有问题的 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Proxy/handler/set
利用Proxy实现一个简化版的MVVM
参照vue的响应式设计模式,将数据劫持部分的
Obejct.defineProperty
替换为Proxy
即可,其他部分,如compile(编译器没有实现,用写好的html模拟已完成编译),watcher,dep,事件监听等基本保持不变,简单实现代码如下:通过
mvvm.data.foo
或者mvvm.data.bar
可以操作数据,可以观察到view做出了改变;在输入框改变输入值,也可以通过mvvm.data
观察到数据被触发改变Proxy实现一个简单的双向绑定的 todo list
这里,欢迎star
https://github.com/GuoYuFu123/test-project/blob/master/proxy/proxyvue.html