Vue双向绑定的实现原理
vue.js双向绑定的实现原理
实现数据绑定的做法有大致如下几种:
发布者-订阅者模式(backbone.js)
脏值检查(angular.js)
数据劫持(vue.js)
数据劫持: vue.js 采用数据劫持的方式,结合发布者-订阅者模式,通过Object.defineProperty()来劫持各个属性的setter,getter以监听属性的变动,在数据变动时发布消息给订阅者,触发相应的监听回调:
var obj = { }; // 为obj定义一个名为 say 的访问器属性 Object.defineProperty(obj, "say", { get: function () {console.log('get方法被调用了')}, set: function (val) {console.log('set方法被调用了,参数是'+val)} }) obj.say // 可以像普通属性一样读取访问器属性,get方法被调用了 obj.say = 'hello vue';//set方法被调用了,参数是hello vue
实现一个极简的MVVM:
<body> <input type="text" name="" value="" id='J_vueInput'> <p id="J_span"></span> </body> <script type="text/javascript"> var obj = {}; Object.defineProperty(obj,'say',{ set: function (val) { document.getElementById('J_vueInput').value = val; document.getElementById('J_span').innerhtml = val; } }) document.addEventListener('keyup',function (e) { obj.say = e.target.value; }) </script>
本文内容仅供个人学习、研究或参考使用,不构成任何形式的决策建议、专业指导或法律依据。未经授权,禁止任何单位或个人以商业售卖、虚假宣传、侵权传播等非学习研究目的使用本文内容。如需分享或转载,请保留原文来源信息,不得篡改、删减内容或侵犯相关权益。感谢您的理解与支持!