vue中实现双向数据绑定原理,使用了Object.defineproperty()方法,方法简单

在vue中双向数据绑定原理,我们一般都是用v-model来实现的 ,但一般在面试话会问到其实现的原理,

方法比较简单,就是利用了es5中的一个方法.Object.defineproperty(),它有三个参数,

Object.defineproperty(obj,'val',attrObject), 参数1: obj是属性所在的对象,参数2: 'val',属性名,它是一个string类型,参数3: {}属性所描述的对象

详情可以看Object.defineproperty的文档

下面直接上demo,

html代码: 

<input type="text" id="inp1">  <br>
    你说啥: <span id="inp2"></span>

js代码 

var inp1 = document.getElementById('inp1')
    var inp2 = document.getElementById('inp2')
    var obj ={}
    Object.defineProperty(obj,'val',{  // 传入obj对象的一个属性  属性名是自定义的
        set: function(newval){  // 通过set方法可以拿到新的值  
            // console.log(newval)
            inp1.value= newval
            inp2.innerHTML= newval
        }
    })
    // 给输入框一个监听事件  监听变化时重新赋值
    inp1.addEventListener('keyup',function(e){
        // console.log(e.target.value)
        obj.val = e.target.value
    })

效果图如下: 

 

posted @ 2018-12-08 11:02  PinkYun  阅读(1061)  评论(0编辑  收藏  举报