Vue数据双向绑定底层实现原理


Posted in Javascript onNovember 22, 2019

简介:

Vue 最独特的特性之一,是其非侵入性的响应式系统。数据模型仅仅是普通的 JavaScript 对象。而当你修改它们时,视图会进行更新。简单的说,就是数据变视图变。

当你把一个普通的 JavaScript 对象传给 Vue 实例的 data 选项,Vue 将遍历此对象所有的属性,并使用 Object.defineProperty 把这些属性全部转为 getter/setter。Object.defineProperty 是 ES5 中一个无法 shim 的特性,这也就是为什么 Vue 不支持 IE8 以及更低版本浏览器。

下例为模拟,Vue数据双向绑定底层实现原理

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8" />
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <title>数据双向绑定底层实现</title>
</head>
<body>
  <button onclick="changeTest()">点我改变</button>
  <div id="test">哈哈哈</div>

  <script>
    let test={};
    let middle='';
    Object.defineProperty(test,'name',{
      set(val){
        console.log('触发setter');//设置、修改时触发set
        middle=val;
        watcher();
      },
      get(){
        console.log('触发geter');//获取、使用时触发get
        return middle;
      }
    })
    function changeTest(){
      test.name="变变变";//触发setter
    }
    function watcher(){
      document.getElementById('test').innerHTML=test.name;//触发get
    }
  </script>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
学习ExtJS border布局
Oct 08 Javascript
JQuery动画和停止动画实例代码
Mar 01 Javascript
二叉树的非递归后序遍历算法实例详解
Feb 07 Javascript
设置点击文本框或图片弹出日历控件的实现代码
May 12 Javascript
jquery hover 不停闪动问题的解决方法(亦为stop()的使用)
Feb 10 Javascript
Node.js进阶之核心模块https入门
May 23 Javascript
了解JavaScript函数中的默认参数
May 30 Javascript
基于javascript实现贪吃蛇经典小游戏
Apr 10 Javascript
jQuery实现验证用户登录
Dec 10 jQuery
axios解决高并发的方法:axios.all()与axios.spread()的操作
Nov 09 Javascript
vue中三级导航的菜单权限控制
Mar 31 Vue.js
vue如何清除浏览器历史栈
May 25 Vue.js
Node如何后台数据库使用增删改查功能
Nov 21 #Javascript
vue移动端使用appClound拉起支付宝支付的实现方法
Nov 21 #Javascript
微信小程序动态设置图片大小的方法
Nov 21 #Javascript
通过原生vue添加滚动加载更多功能
Nov 21 #Javascript
小程序api实现promise封装过程解析
Nov 21 #Javascript
如何基于原生javaScript生成带图片的二维码
Nov 21 #Javascript
Vue中Table组件行内右键菜单实现方法(基于 vue + AntDesign)
Nov 21 #Javascript
You might like
PHP设计模式 注册表模式(多个类的注册)
2012/02/05 PHP
php中的一些数组排序方法分享
2012/07/20 PHP
php curl 伪造IP来源的实例代码
2012/11/01 PHP
php加水印的代码(支持半透明透明打水印,支持png透明背景)
2013/01/17 PHP
php+Memcached实现简单留言板功能示例
2017/02/15 PHP
setTimeout 不断吐食CPU的问题分析
2009/04/01 Javascript
JavaScript操作XML 使用百度RSS作为新闻源示例
2012/02/17 Javascript
js精度溢出解决方案
2012/12/02 Javascript
在JavaScript中构建ArrayList示例代码
2014/09/17 Javascript
AngularJs中route的使用方法和配置
2016/02/04 Javascript
JavaScript页面实时显示当前时间实例代码
2016/10/23 Javascript
AngularJS $http模块POST请求实现
2017/04/08 Javascript
Vue实现购物车功能
2017/04/27 Javascript
JavaScript类的继承操作实例总结
2018/12/20 Javascript
js变量声明var使用与不使用的区别详解
2019/01/21 Javascript
JS事件绑定的常用方式实例总结
2019/03/02 Javascript
详解jQuery-each()方法
2019/03/13 jQuery
uniapp微信小程序:key失效的解决方法
2021/01/20 Javascript
[46:20]TFT vs Secret Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
全面解析Python的While循环语句的使用方法
2015/10/13 Python
常用python编程模板汇总
2016/02/12 Python
详解python中asyncio模块
2018/03/03 Python
解决pip install的时候报错timed out的问题
2018/06/12 Python
Python中shapefile转换geojson的示例
2019/01/03 Python
关于python之字典的嵌套,递归调用方法
2019/01/21 Python
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
python中有关时间日期格式转换问题
2019/12/25 Python
卡西欧B级产品官方网站:Casio Outlet
2018/05/22 全球购物
求职自荐信格式
2013/12/04 职场文书
产品促销活动策划书
2014/01/15 职场文书
美国探亲签证邀请信
2014/02/05 职场文书
村级个人对照检查材料
2014/08/22 职场文书
政工例会汇报材料
2014/08/26 职场文书
捐款通知怎么写
2015/04/24 职场文书
商业计划书范文
2019/04/24 职场文书
SQL Server删除表中的重复数据
2022/05/25 SQL Server