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 相关文章推荐
$(&quot;&quot;).click与onclick的区别示例介绍
Sep 25 Javascript
javascript+canvas制作九宫格小程序
Dec 28 Javascript
js控制多图左右滚动切换效果代码分享
Aug 26 Javascript
KnockoutJS 3.X API 第四章之表单value绑定
Oct 10 Javascript
利用Js的console对象,在控制台打印调式信息测试Js的实现
Nov 26 Javascript
JavaScript+HTML5 canvas实现放大镜效果完整示例
May 15 Javascript
JavaScript中的 new 命令
May 22 Javascript
初学vue出现空格警告的原因及其解决方案
Oct 31 Javascript
超简单的微信小程序轮播图
Nov 22 Javascript
微信小程序实现二维码签到考勤系统
Jan 16 Javascript
Vue 中获取当前时间并实时刷新的实现代码
May 12 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
Jun 24 jQuery
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中的超全局变量
2006/10/09 PHP
php下通过POST还是GET来传值
2008/06/05 PHP
php 生成唯一id的几种解决方法
2013/03/08 PHP
ThinkPHP3.2框架自定义配置和加载用法示例
2018/06/14 PHP
Prototype1.6 JS 官方下载地址
2007/11/30 Javascript
javascript vvorld 在线加密破解方法
2008/11/13 Javascript
js+CSS 图片等比缩小并垂直居中实现代码
2008/12/01 Javascript
基于jQuery的淡入淡出可自动切换的幻灯插件打包下载
2010/09/15 Javascript
html中table数据排序的js代码
2011/08/09 Javascript
jquery tab插件精简版分享
2011/09/10 Javascript
IE8中动态创建script标签onload无效的解决方法
2014/12/22 Javascript
JavaScript实现计算字符串中出现次数最多的字符和出现的次数
2015/03/12 Javascript
Bootstrap中的Dropdown下拉菜单更改为悬停(hover)触发
2016/08/31 Javascript
详解Angular.js的$q.defer()服务异步处理
2016/11/06 Javascript
vue实现列表的添加点击
2016/12/29 Javascript
微信小程序 devtool隐藏的秘密
2017/01/21 Javascript
js实现一个页面多个倒计时的3种方法
2019/02/25 Javascript
js实现简易计算器功能
2019/10/18 Javascript
微信小程序加载机制及运行机制图解
2019/11/27 Javascript
微信小程序使用自定义组件导航实现当前页面高亮
2020/01/02 Javascript
跟老齐学Python之数据类型总结
2014/09/24 Python
理解Python中的With语句
2015/02/02 Python
使用rpclib进行Python网络编程时的注释问题
2015/05/06 Python
python 中的列表生成式、生成器表达式、模块导入
2019/06/19 Python
Django--权限Permissions的例子
2019/08/28 Python
Python 实现训练集、测试集随机划分
2020/01/08 Python
python读写文件write和flush的实现方式
2020/02/21 Python
pytorch 限制GPU使用效率详解(计算效率)
2020/06/27 Python
CSS3 filter(滤镜)实现网页灰色或者黑色模式的示例代码
2021/02/24 HTML / CSS
三星法国官方网站:Samsung法国
2019/10/31 全球购物
法学专业个人求职信
2013/09/26 职场文书
机械制造专业毕业生求职信
2014/03/02 职场文书
运输服务质量承诺书
2014/03/27 职场文书
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
2015年外联部工作总结
2015/04/03 职场文书
详细总结Python常见的安全问题
2021/05/21 Python