vue的双向绑定原理极简版

1 篇文章 0 订阅

原理


vue.js 则是采用数据劫持结合发布者-订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的getter,setter,在数据变动时发布消息给订阅者,触发相应的监听回调。我们先来看Object.defineProperty()这个方法:

<script>
        var obj = {}
        let middel = 100
        Object.defineProperty(obj,"msg",{
            get(){
                return middel
            },
            set(val){
                middel = val
            }
        })
        obj.msg = 1111//再给 obj 设置 msg 属性的时候,会调用自身的 set 方法
        console.log(obj.msg)//在打印 obj.msg 时会调用自身的 get 方法     //打印结果为1111
</script>

应用

同步显示输入框里的内容


<body>
    <div id="dis"></div>
    <input type="text" id="inp">
    <script src="./vue.js"></script>
    <script>
        var obj  = {};
        var dis = document.querySelector('#dis')
        var inp = document.querySelector('#inp')
        Object.defineProperty(obj, 'name', {
            get: function() {
                return val;
            },
            set: function (newVal) {//当该属性被赋值的时候触发
                inp.value = newVal;
                dis.innerHTML = newVal;
            }
        })
        inp.addEventListener('input', function(e) {
            obj.name = e.target.value;// 给obj的name属性赋值,进而触发该属性的set方法
        });
        obj.name = 'fei';//在给obj设置name属性的时候,触发了set这个方法
    </script>
</body>
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值