Vue 2.0 的响应式是基于Object.defineProperty实现的 当你把一个普通的 JavaScript 对象传入 Vue 实例作为 data 选项,Vue 将遍历此对象所有的 property,并使用 Object.defineProperty 把这些 property 全部转为 getter/setter。Object.defineProperty 是 ES5 中一个无法 shim 的特性,这也就是 Vue 不支持 IE8 以及更低版本浏览器的原因。(引用:https://cn.vuejs.org/v2/guide/reactivity.html)

Vue 3.0 的响应式是基于 ES6 的 Proxy 实现的

直接上代码

<!DOCTYPE html>
<html lang="en"> <head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Vue 响应式原理</title>
</head> <body>
<div id="msg">
里斯
</div>
<div id="count">
里斯
</div>
<script>
window.log = console.log
let data = {
msg: '张三',
count: 10,
}
let vm = {}
// Vue 2.0 响应式原理
// for (const key in data) {
// Object.defineProperty(vm, key, {
// enumerable: true,
// configurable: true,
// get() {
// log('get', data[key])
// return data[key]
// },
// set(newVal) {
// log('set', newVal)
// if (data[key] === newVal) return
// data[key] = newVal
// document.querySelector("#" + key).textContent = newVal
// }
// })
// }
//-----------------------
// Vue 3.0 响应式原理
vm = new Proxy(data, {
get(target, key) {
log('get', target[key], key)
return target[key]
},
set(target, key, newVal) {
log('set', newVal, key)
if (target[key] === newVal) return
target[key] = newVal
document.querySelector("#" + key).textContent = newVal
}
})
//-----------------------
vm.msg = '李四'
vm.count = 10
log(vm.msg, vm.count)
</script>
</body> </html>

最新文章

  1. Proxy(代理)-对象结构型模式
  2. 自己封装的JS分页功能[用于搭配后台使用]
  3. 引擎崩溃、异常、警告、BUG与提示总结及解决方法
  4. java.lang.ClassCastException: java.lang.String cannot be cast to com.jy.hfims.domain 映射实体类型错误
  5. gene框架文档 - 路由类 gene_router
  6. sys.path和os.path
  7. sizeof usage &amp; big / little endian
  8. XML转换为Map通用算法实现 Java版本(Stax实现)
  9. BZOJ 3953 Self-Assembly 解题报告
  10. 0课程介绍(Week1,3月3日)
  11. STS 配置tomcat以后,无法访问
  12. 扩展Python模块系列(一)----开发环境配置
  13. hibernate的session的增删查改
  14. ArrayList增加扩容问题 源码分析
  15. hdu6440 Dream(费马小定理)
  16. PHP--根据手机号-淘宝平台获取归属地运营商信息
  17. 关于ASPxComboBox通过ClientInstanceName,js获取不到控件的问题
  18. EntityFramework:状态变化与方法的关系(朋友的学习笔记)
  19. 20145207《Java程序设计》实验五(网络编程与安全)实验报告
  20. 对于REST中无状态(stateless)的一点认识(转)

热门文章

  1. jvm源码解读--03 常量池的解析ConstantPool
  2. webrtc编译
  3. iOS实现常用地图坐标系转换(swift5)
  4. 大数据学习(26)—— Spark之RDD
  5. ORACLE ORA-00933: SQL 命令未正确结束,
  6. nmap工具使用随笔
  7. Java基础——JavaDoc生成文档
  8. pom.xml中web.xml is missing and &lt;failOnMissingWebXml&gt; is set to true错误的解决
  9. Linux命令(一)之目录结构、Linux终端操作、关机重启等一些基本操作
  10. 解决SecureCRT中删除会话后无法重建问题