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 相关文章推荐
使用JQuery和s3captche实现一个水果名字的验证
Aug 14 Javascript
jquery each()源代码
Feb 14 Javascript
实测jquery data()如何存值
Aug 18 Javascript
js控制iframe的高度/宽度让其自适应内容
Apr 09 Javascript
JavaScript AOP编程实例
Jun 16 Javascript
js实现的奥运倒计时时钟效果代码
Dec 09 Javascript
Webpack 实现 AngularJS 的延迟加载
Mar 02 Javascript
js利用for in循环获取 一个对象的所有属性以及值的实例
Mar 30 Javascript
AngularJS基于MVC的复杂操作实例讲解
Dec 31 Javascript
JS实现计算小于非负数n的素数的数量算法示例
Feb 26 Javascript
vue请求数据的三种方式
Mar 04 Javascript
vue监听dom大小改变案例
Jul 29 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
关于svn冲突的解决方法
2013/06/21 PHP
Yii2框架引用bootstrap中日期插件yii2-date-picker的方法
2016/01/09 PHP
PHP实现生成带背景的图形验证码功能
2016/10/03 PHP
PHP基于XMLWriter操作xml的方法分析
2017/07/17 PHP
php-fpm.conf配置文件中文说明详解及重要参数说明
2018/10/10 PHP
使Ext的Template可以解析二层的json数据的方法
2007/12/22 Javascript
js removeChild 障眼法 可能出现的错误
2009/10/06 Javascript
Jquery中增加参数与Json转换代码
2009/11/20 Javascript
javaScript call 函数的用法说明
2010/04/09 Javascript
jquery getScript动态加载JS方法改进详解
2012/11/15 Javascript
js运动框架_包括图片的淡入淡出效果
2013/05/11 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
开发中可能会用到的jQuery小技巧
2014/03/07 Javascript
jQuery时间轴插件使用详解
2015/07/16 Javascript
js判断浏览器类型及设备(移动页面开发)
2015/07/30 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
nodejs密码加密中生成随机数的实例代码
2017/07/17 NodeJs
vue cli2.0单页面title修改方法
2018/06/07 Javascript
vue接入腾讯防水墙代码
2019/05/07 Javascript
微信小程序实现多图上传
2020/06/19 Javascript
详解React 条件渲染
2020/07/08 Javascript
swiper自定义分页器的样式
2020/09/14 Javascript
python计算阶乘和的方法(1!+2!+3!+...+n!)
2019/02/01 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
Django实现文件上传下载
2019/10/06 Python
numpy:np.newaxis 实现将行向量转换成列向量
2019/11/30 Python
英国IT硬件供应商,定制游戏PC:Mesh Computers
2019/03/28 全球购物
正宗的日本零食和糖果订阅盒:Bokksu
2019/11/21 全球购物
给女朋友的道歉信
2014/01/10 职场文书
春节晚会主持词
2014/03/24 职场文书
圣诞节活动策划方案
2014/06/09 职场文书
运动会广播稿200字
2014/10/18 职场文书
党风廉正建设个人工作总结
2015/03/06 职场文书
学习新党章心得体会2016
2016/01/15 职场文书
SQL Server表分区删除详情
2021/10/16 SQL Server
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS