Object.defineProperty-vuejs数据响应基石

https://www.jianshu.com/p/07ba2b0c8fca

https://juejin.im/post/5b99215d5188255c520cfe22

vuejs数据双向绑定地核心原理就是使用 Object.defineProperty 这个函数来实现数据劫持,并通过publisher-subscriber模型来劫持和使用每一个属性。setter和getter在数据发生变化时publish一个message给subscriber,并且触发对应地监听回调被调用。当一个普通地Object作为vue组件地data时,vue会递归枚举该Object的所有属性,并使用Object.defineProperty将这些属性转变为getter/setter.用户并不会感知到getter/stter,但是这些getter/setter却使得vue可以跟踪dependency并且当属性被访问或者修改时通知对应的变化。

vue通过Observer,Compiler和Watcher来实现MVVM的双向数据绑定。

1. 通过observer来监控你的model数据变化,

2.通过Compile来parse compiler template instructions {{}}

3. watcher建立observer和compile

4. 他们之间的通信桥梁: Data Change -> View update/View Interaction Change->Data model change

复制代码
<div id="app">
    <input type="text" id="txt">
    <p id="show"></p>
</div>

<script type="text/javascript">
    var obj = {}
    Object.defineProperty(obj,'txt',{
        get:function () {
            return obj
        },
        set:function (newVal) {
            document.getElementById('txt').value = newVal
            document.getElementById('show').innerHTML = newVal
        }
    })
    document.addEventListener('keyup',function(e){
        obj.txt = e.target.value
    })
</script>
复制代码

 

posted @   世有因果知因求果  阅读(513)  评论(0编辑  收藏  举报
编辑推荐:
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示