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 相关文章推荐
js中判断数字\字母\中文的正则表达式 (实例)
Jun 29 Javascript
JavaScript中的函数重载深入理解
Aug 04 Javascript
Javascript正则控制文本框只能输入整数或浮点数
Sep 02 Javascript
JavaScript中的pow()方法使用详解
Jun 15 Javascript
javascript高级选择器querySelector和querySelectorAll全面解析
Apr 07 Javascript
详解jQuery中的deferred对象的使用(一)
May 27 Javascript
使用three.js 画渐变的直线
Jun 05 Javascript
Bootstrap 最常用的JS插件系列总结(图片轮播、标签切换等)
Jul 14 Javascript
jQuery模拟实现天猫购物车动画效果实例代码
May 25 jQuery
浅谈JS中几种轻松处理'this'指向方式
Sep 16 Javascript
JavaScript 常见的继承方式汇总
Sep 17 Javascript
JS实现简单的九宫格抽奖
Jun 28 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
一个简单的自动发送邮件系统(二)
2006/10/09 PHP
php session 错误
2009/05/21 PHP
php实现遍历多维数组的方法
2015/11/25 PHP
利用PHP抓取百度阅读的方法示例
2016/12/18 PHP
php输出形式实例整理
2020/05/05 PHP
JavaScript 事件参考手册
2008/12/24 Javascript
Javascript 汉字字节判断
2009/08/01 Javascript
加载jQuery后$冲突的解决办法
2010/07/09 Javascript
兼容IE和Firefox的javascript获取iframe文档内容的函数
2011/08/15 Javascript
基于jquery实现的省市区级联无ajax
2013/09/24 Javascript
引用 js在IE与FF之间的区别详细解析
2013/11/20 Javascript
探寻Javascript执行效率问题
2014/11/12 Javascript
JavaScript制作简易的微信打飞机
2015/03/31 Javascript
学习Bootstrap组件之下拉菜单
2015/07/28 Javascript
jQuery div拖拽用法实例
2016/01/14 Javascript
jQuery插件开发精品教程让你的jQuery提升一个台阶
2016/01/27 Javascript
详解vue过滤器在v2.0版本用法
2017/06/01 Javascript
React Native中导航组件react-navigation跨tab路由处理详解
2017/10/31 Javascript
使用nodejs分离html文件里的js和css详解
2019/04/12 NodeJs
python算法学习之桶排序算法实例(分块排序)
2013/12/18 Python
Python中暂存上传图片的方法
2015/02/18 Python
Python字符串处理函数简明总结
2015/04/13 Python
Python利用Nagios增加微信报警通知的功能
2016/02/18 Python
利用python操作SQLite数据库及文件操作详解
2017/09/22 Python
python中lambda()的用法
2017/11/16 Python
三星俄罗斯授权在线商店:Samsung俄罗斯
2019/09/28 全球购物
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
租赁意向书范本
2014/04/01 职场文书
民主生活会对照检查材料
2014/09/22 职场文书
承兑汇票转让证明怎么写?
2014/11/30 职场文书
篮球赛闭幕式主持词
2015/07/03 职场文书
廉洁自律准则学习心得体会
2016/01/13 职场文书
2019年怎样才能撰写出优秀的自荐信
2019/03/25 职场文书
Python基础教程,Python入门教程(超详细)
2021/06/24 Python
利用python做数据拟合详情
2021/11/17 Python
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python