响应式原理图:
1.通过Object.defineProperty来实现监听数据的改变和读取(属性中的getter和setter方法) 实现数据劫持;

2.观察者模式(发布者-订阅者)
观察者(订阅者) – Watcher:
update():当事件发生时,具体要做的事情

目标(发布者) – Dep:
①deps 数组:存储所有的观察者
②addDep():添加观察者
③notify():当事件发生,调用所有观察者(全部的依赖)的 update() 方法

3.当数据发生改变通过发布者订阅者模式来进行通知 进行界面刷新


直接看代码:

<script>//依赖let Dep = (function() {function Dep() {this.deps = [];  // 用来存储全部的依赖watcher};// 收集依赖Dep.prototype.addDep = function (watcher) {this.deps.push(watcher);console.log("收集依赖的列表", this.deps);};// 通知依赖Dep.prototype.notify = function(params) {console.log('params', params)this.deps.forEach(item => {item.update(params);  //  通过watch中的update,通知页面更新});};return Dep;})();  // 立即执行函数体//属性全部的依赖就是watcherlet Watcher = (function() {function Watcher(id) {this.id = id;};Watcher.prototype.update = (value) => {console.log("数据改变了,通知我要更新", value)document.getElementById("text").innerText = value;};return Watcher;})();let obj = {name: "nihao",age: 18};let dep = new Dep();    // 新建用于存储watcher的数据let value = obj.age;// 响应式方法Object.definePropertyObject.defineProperty(obj, "age", {get() {let watcher = new Watcher("1"); // 实例化一个watcherconsole.log('watcher', watcher)dep.addDep(watcher);  // 收集依赖return value;  // return的值不能直接object.age,会溢出},set(value) {console.log('set调取')dep.notify(value);},});console.log(obj.age)  //  读取age,会调取get方法obj.age = 23;  // 改变age,会调取set方法document.getElementById("app").addEventListener("click", () => {obj.age = (Math.random()*20).toFixed();})</script>

手写vue响应式原理相关推荐

  1. Vue响应式原理探究之“发布-订阅”模式

    前言 在面试题中经常会出现与"发布订阅"模式相关的题目,比如考察我们对Vue响应式的理解,也会有题目直接考验我们对"发布订阅"模式或者观察者模式的理解,甚至还会 ...

  2. 【2019 前端进阶之路】深入 Vue 响应式原理,活捉一个 MVVM

    作者:江三疯,专注前端开发.欢迎关注公众号前端发动机,第一时间获得作者文章推送,还有各类前端优质文章,致力于成为推动前端成长的引擎. 前言 作为 Vue 面试中的必考题之一,Vue 的响应式原理,想必 ...

  3. vue 数组删除 dome没更新_详解Vue响应式原理

    摘要: 搞懂Vue响应式原理! 作者:浪里行舟 原文:深入浅出Vue响应式原理 Fundebug经授权转载,版权归原作者所有. 前言 Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是 ...

  4. Vue响应式原理的简单模型

    1.前言 最近在梳理vue响应式的原理,有一些心得,值得写一篇博客出来看看. 其实之前也尝试过了解vue响应式的原理,毕竟现在面试看你用的是vue的话,基本上都会问你几句vue响应式的原理.以往学习这 ...

  5. Vue响应式原理(看这一篇就够了)

    你肯定听说过Object.denfineProperty或是Proxy\reflect,这的确是在VUE响应式原理中起重要作用的一部分代码,但这远远不能代表整个流程的精妙.上图: 不懂没关系,请往下看 ...

  6. Vue源码--解读vue响应式原理

    原文链接:https://geniuspeng.github.io/2018/01/05/vue-reactivity/ Vue的官方说明里有深入响应式原理这一节.在此官方也提到过: 当你把一个普通的 ...

  7. 深入理解Vue响应式原理

    前言 Vue响应式原理是Vue最独特的特性之一,当数据模型进行修改时,视图就会进行更新,这使得状态管理简单直接,但是其底层的细节还是需要我们深入学习理解,这样遇到一些问题我们才能快速进行定位,并解决: ...

  8. Vue学习 — Vue响应式原理

    一. Object.defineProperty 在学习vue响应式原理之前,必须搞懂 Object.defineProperty. Object.defineProperty(obj, prop, ...

  9. 详解Vue响应式原理

    摘要: 搞懂Vue响应式原理! 作者:浪里行舟 原文:深入浅出Vue响应式原理 Fundebug经授权转载,版权归原作者所有. 前言 Vue 最独特的特性之一,是其非侵入性的响应式系统.数据模型仅仅是 ...

最新文章

  1. centos mate桌面_CentOS 7安装桌面汇总
  2. Webservice 的设计和模式
  3. Spring基础知识和配置
  4. 活动推荐 | 于斯为盛,论道长沙!CCL 2018等你来!
  5. kafka丢数据问题方案(转载+整理+汇总)
  6. magento去除子分类的url地址中带有父分类的url key
  7. java ecc signature_如何用python验证android/java的ECC签名
  8. 【Linux】创建逻辑卷管理(LVM)
  9. [转]如果你出现这十种迹象,你就该跳槽了
  10. 安卓手机显示没有网络连接到服务器,安卓手机 总是提示登录网络
  11. 红外遥控模块的使用方法,以及stm32代码
  12. Docker 连接宿主 Redis
  13. 更新中国地区ip列表
  14. macbook pro 重置SMC
  15. 智能生活管家项目之一-系统简介
  16. 大数据可视化技术——平行坐标图、成对关系图、高级折线图
  17. 移动端车牌识别:新能源车牌识别上线
  18. 【C++进阶】第二十篇——map和set(map和set的用法+multimap+multiset+map和set代码实现)
  19. 绘制简单封闭图形并且进行填充
  20. MT7621处理器资料解析,MT7621数据表

热门文章

  1. 助力中文文字识别突破,美团公开首个真实场景招牌图像数据集 1
  2. 记一次Chrome冒充QQ浏览器领取奖励之行
  3. fiddler,iphone安装证书后还是无法访问HTTPS网站
  4. 一个表字段做为表名_3D打印专家为自己做了一个逼真的面具
  5. 线性表顺序存储结构的实现
  6. MVC基础和HTTP
  7. This may indicate that the storage must be wiped and the GlusterFS nodes must be reset
  8. MiB 和 MB,KiB 和 KB 等的区别
  9. 广东计算机类211大学,211大学名单
  10. Few-shot learning(少样本学习)和 Meta-learning(元学习)概述