前言前文提到了Observer类和observe过程,由于遇到的场景简单,暂时没有去使用Observer类来解决问题。通过observe过程的子过程observeObject和observeArray来特殊处理引用类型的可观察拦截。结合使用Vue的经验,假设有关于数组类型数据array的列表循环渲染,也有关于array的watch。那么当按照下标对array赋值时,列表渲染会被更新,但是普通...

前言前两篇文章让Watcher可以处理单一状态的观察和多个状态计算过程的观察,都是针对基础类型数据,对于引用类型,甚至更深层次的数据结构应当如何处理。直观的来看,引用类型的状态,其包含的数据字段也应当通过getter/setter的包裹,从而能被深层次的观察。所以为属性设置getter和setter拦截,需要作为一个通用过程,处理引用类型数据的时候可以在递归处理时进行正常的工作Observe...

前言前一篇文章中,通过watch属性的工作来简要说明Watcher类的最最基本结构,以及最简单工作流程,除此之外,Vue.prototype.$watch的工作原理也是类似的。同时也看到了状态变动时,watch指定的函数被执行,照这个思路延伸下去,computed属性也可以用这种方式实现。先执行一遍computed指定的函数(实际上就是一个运算过程),在运算的过程中会访问到所依赖的数据,这些...

前置Vue的响应式原理的核心,表面上就是观察者模式,state作为被观察的主体,视图等作为观察者。观察者模式(或者叫发布/订阅模式,这里不做纠结)除了观察者和被观察者这两个概念主题,最重要的就是“观察”和“通知”两个行为。从这些内容,不难推断出Vue中核心类—Watcher的基本形态和行为。观察者模式观察者模式和发布/订阅模式本质上差距不大,具体实现上可能有其他角色参与,这里不做过多区分。观...

前言虽然了解过生成器,也了解过生成器函数和promise的关系,可迭代协议和迭代器协议也都看过,可是面试的时候遇到了,还是没有顺利的解决,于是决定再学一次。迭代协议本章节依赖《MDN-迭代协议》一章,做简要总结。是协议而不是语法迭代协议是ECMAScript 2015的一组补充规范,所以可以有多种具体的实现。迭代协议包含了两个具体协议:可迭代协议和迭代器协议。可迭代协议可迭代协议其实就是一组...