Skip to main content

Command Palette

Search for a command to run...

vue双向数据绑定与抽象语法树

Updated
1 min readView as Markdown

双向数据绑定原理

// 数据劫持/数据代理
object.defineProperty()

数组通过改写数组中push,pop,shift,unshift,splice,sort,reverse等方法实现数组的双向绑定。

vue的双向数据绑定,是采用数据劫持结合发布者和订阅者模式的方式,通过Object.defineProperty()来劫持各个属性的setter,getter,在数据变动时发布消息给订阅者,触发相应的监听回调,getter函数里面执行的任务是watcher订阅者, 而setter函数执行的任务是发布者

抽象语法树(ast)

抽象语法树的本质上是一个JS对象,Vue在审视所有HTML结构时是以字符串的形式进行的,最终将其解析为JS对象。AST抽象语法树服务于模板编译,将一种语法翻译为另一种语法。在Vue中将模板语法编译为HTML语法,自己作为中转站。

抽象语法树和虚拟节点的关系

模板语法会变成抽象语法树AST,而抽象语法树最后不会变成虚拟节点,而是会直接变成渲染函数(h函数),h函数的执行会变成虚拟节点,虚拟节点经过diff 会在界面上显示。也就是说抽象语法树是不会 diff 的,diff 是用虚拟节点 diff 的,抽象语法树也不是直接生成 虚拟节点 的。

More from this blog

js 数组方法

一、增删改方法 push()方法接收任意数量的参数,并将它们添加到数组末尾,返回数组的最新长度 unshift()在数组开头添加任意多个值,然后返回新的数组长度 pop() 方法用于删除数组的最后一项,同时减少数组的 length 值,返回被删除的项 shift()方法用于删除数组的第一项,同时减少数组的 length 值,返回被删除的项 splice功能强大,可以同时对数组进行增删改的操作 二、搜索和位置方法 indexOf()返回要查找的元素在数组中第一次出现的下标,如果没找到则返回 -1 ...

Oct 16, 20231 min read

Server-Sent Events(SSE)

Server-Sent Events(SSE)是一种用于实现服务器向客户端实时推送数据的Web技术。与传统的轮询和长轮询相比,SSE提供了更高效和实时的数据推送机制。 SSE基于HTTP协议,允许服务器将数据以事件流(Event Stream)的形式发送给客户端。客户端通过建立持久的HTTP连接,并监听事件流,可以实时接收服务器推送的数据。 SSE的主要特点包括: 简单易用:SSE使用基于文本的数据格式,如纯文本、JSON等,使得数据的发送和解析都相对简单。 单向通信:SSE支持服务器向客户...

Sep 21, 20231 min read

Untitled Publication

28 posts