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 相关文章推荐
深入理解javascript中的立即执行函数(function(){…})()
Jun 12 Javascript
jQuery中prev()方法用法实例
Jan 08 Javascript
jquery实现的淡入淡出下拉菜单效果
Aug 25 Javascript
JavaScript事件学习小结(三)js事件对象
Jun 09 Javascript
BooStrap对导航条的改造实践小结
Sep 21 Javascript
详解基于javascript实现的苹果系统底部菜单
Dec 02 Javascript
原生js实现form表单序列化的方法
Aug 02 Javascript
js的各种数据类型判断的介绍
Jan 19 Javascript
VUE接入腾讯验证码功能(滑块验证)备忘
May 07 Javascript
Node.js 深度调试方法解析
Jul 28 Javascript
JavaScript实现HTML导航栏下拉菜单
Nov 25 Javascript
如何在JavaScript中使用localStorage详情
Feb 04 Javascript
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下清空字符串中的HTML标签的代码
2010/09/06 PHP
PHP如何解决网站大流量与高并发的问题
2011/06/25 PHP
php约瑟夫问题解决关于处死犯人的算法
2015/03/23 PHP
js判断IE6/IE7/FF的代码[XMLHttpRequest]
2011/02/16 Javascript
js固定DIV高度,超出部分自动添加滚动条的简单方法
2013/07/10 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
javascript实现起伏的水波背景效果
2016/05/16 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
纯js实现手风琴效果代码
2020/04/17 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
layer实现关闭弹出层刷新父界面功能详解
2017/11/15 Javascript
node.js多个异步过程中判断执行是否完成的解决方案
2017/12/10 Javascript
nodejs实现解析xml字符串为对象的方法示例
2018/03/14 NodeJs
详解如何在Angular优雅编写HTTP请求
2018/12/05 Javascript
原生JS 实现的input输入时表格过滤操作示例
2019/08/03 Javascript
vue中如何实现后台管理系统的权限控制的方法步骤
2019/09/05 Javascript
修改vue源码实现动态路由缓存的方法
2020/01/21 Javascript
[03:55]DOTA2完美大师赛选手传记——LFY.MONET
2017/11/18 DOTA
[45:16]完美世界DOTA2联赛循环赛 IO vs FTD BO2第二场 11.05
2020/11/06 DOTA
选择python进行数据分析的理由和优势
2019/06/25 Python
python做反被爬保护的方法
2019/07/01 Python
Django 路由控制的实现
2019/07/17 Python
python 实现矩阵填充0的例子
2019/11/29 Python
如何在Python 游戏中模拟引力
2020/03/27 Python
基于python3.7利用Motor来异步读写Mongodb提高效率(推荐)
2020/04/29 Python
大学英语演讲稿(中英文对照)
2014/01/14 职场文书
名企HR怎样看待求职信
2014/02/23 职场文书
食品安全汇报材料
2014/08/18 职场文书
个人作风纪律整顿整改措施
2014/10/25 职场文书
大学生求职信怎么写
2015/03/19 职场文书
2016大学自主招生推荐信范文
2015/03/23 职场文书
CSS3实现的侧滑菜单
2021/04/27 HTML / CSS
如何用JavaScript学习算法复杂度
2021/04/30 Javascript
Python 数据科学 Matplotlib图库详解
2021/07/07 Python