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中美元符号命名冲突问题
Jan 08 Javascript
JS构造函数与原型prototype的区别介绍
Jul 04 Javascript
Js 获取、判断浏览器版本信息的简单方法
Aug 08 Javascript
bootstrap fileinput 上传插件的基础使用
Feb 17 Javascript
基于Vue2实现的仿手机QQ单页面应用功能(接入聊天机器人 )
Mar 30 Javascript
基于react组件之间的参数传递(详解)
Sep 05 Javascript
详解vue-cli项目中用json-sever搭建mock服务器
Nov 02 Javascript
js 原生判断内容区域是否滚动到底部的实例代码
Nov 15 Javascript
微信小程序button组件使用详解
Jan 31 Javascript
Redux实现组合计数器的示例代码
Jul 04 Javascript
Vue.js下拉菜单组件使用方法详解
Oct 19 Javascript
Vue组件跨层级获取组件操作
Jul 27 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实现获取农历(阴历)、节日、节气的类与用法示例
2017/11/20 PHP
jQuery 表格插件整理
2010/04/27 Javascript
如何设置一定时间内只能发送一次请求
2014/02/28 Javascript
JavaScript中的迭代器和生成器详解
2014/10/29 Javascript
node.js中的buffer.toString方法使用说明
2014/12/14 Javascript
JavaScript去除数组里重复值的方法
2015/07/13 Javascript
图片旋转、鼠标滚轮缩放、镜像、切换图片js代码
2020/12/13 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
详解Node.js项目APM监控之New Relic
2017/05/12 Javascript
用Electron写个带界面的nodejs爬虫的实现方法
2019/01/29 NodeJs
vue-cli3+ts+webpack实现多入口多出口功能
2019/05/30 Javascript
Vue组件实现触底判断
2019/06/26 Javascript
Vue初始化中的选项合并之initInternalComponent详解
2020/06/11 Javascript
如何手动实现一个 JavaScript 模块执行器
2020/10/16 Javascript
python单线程实现多个定时器示例
2014/03/30 Python
python网络编程之文件下载实例分析
2015/05/20 Python
Python实现PS图像调整之对比度调整功能示例
2018/01/26 Python
matlab中实现矩阵删除一行或一列的方法
2018/04/04 Python
用Python写脚本,实现完全备份和增量备份的示例
2018/04/29 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
Django用户登录与注册系统的实现示例
2020/06/03 Python
python实现文件+参数发送request的实例代码
2021/01/05 Python
美国智能家居专家:tink
2019/06/04 全球购物
2014年公务员思想汇报范文:全心全意为人民服务
2014/03/06 职场文书
小学生学习感言
2014/03/10 职场文书
大学开学计划书
2014/04/30 职场文书
商业企业管理专业求职信
2014/07/10 职场文书
小学学校门卫岗位职责
2014/08/03 职场文书
三严三实对照检查材料思想汇报
2014/09/28 职场文书
党的群众路线专项整治方案
2014/11/03 职场文书
教师党的群众路线教育实践活动个人整改措施
2014/11/04 职场文书
校本研修个人总结
2015/02/28 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
个人收入证明格式
2015/06/24 职场文书
2016师德师风学习心得体会
2016/01/12 职场文书
导游词之包公祠
2019/11/25 职场文书