
实现一个简易Vue(一)
发布日期:2021-05-07 18:33:28
浏览次数:26
分类:精选文章
本文共 1233 字,大约阅读时间需要 4 分钟。
整体分析
- Vue
- 把 data 中的成员注入到 Vue 实例,并且把 data 中的成员转成 getter/setter
- Observer
- 能够对数据对象的所有属性进行监听,如有变动可拿到最新值并通知 Dep
- Compiler
- 解析每个元素中的指令/插值表达式,并替换成相应的数据
- Dep
- 添加观察者(watcher),当数据变化通知所有观察者
- Watcher
- 数据变化更新视图
1. Vue
- 功能
- 负责接收初始化的参数(选项)
- 负责把 data 中的属性注入到 Vue 实例,转换成 getter/setter
- 负责调用 observer 监听 data 中所有属性的变化
- 负责调用 compiler 解析指令/插值表达式
- 代码
class Vue { constructor(options) { // 1. 通过属性保存选项的数据 this.$options = options || { } this.$data = options.data || { } this.$el = typeof options.el === 'string' ? document.querySelector(options.el) : options.el // 2. 把data中的成员转换成getter和setter,注入到vue实例中 this._proxyData(this.$data) // 3. 调用observer对象,监听数据的变化 new Observer(this.$data) // 4. 调用compiler对象,解析指令和差值表达式 new Compiler(this) } // 数据代理 _proxyData(data) { // 遍历data中的所有属性 Object.keys(data).forEach(key => { // 使用箭头函数让 this 指向 vue 实例 // 把data的属性注入到vue实例中 Object.defineProperty(this, key, { enumerable: true, // 可枚举 configurable: true, // 可配置 get() { return data[key] }, set(newValue) { // 数据没有发生变化 return 停止执行 if (newValue === data[key]) { return } data[key] = newValue } }) }) }}
发表评论
最新留言
关注你微信了!
[***.104.42.241]2025年03月19日 05时50分00秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
shell(十)case的几个典型应用
2021-05-08
Linux环境变量配置错误导致命令不能使用(杂谈)
2021-05-08
openstack安装(六)镜像glance服务安装
2021-05-08
openstack安装(九)网络服务的安装--控制节点
2021-05-08
shell编程(六)语言编码规范之(变量)
2021-05-08
vim杂谈(三)之配色方案
2021-05-08
vim杂谈(五)之vim不加载~/.vimrc
2021-05-08
Linux杂谈之终端快捷键
2021-05-08
vimscript学习笔记(二)预备知识
2021-05-08
vimscript学习笔记(三)信息打印
2021-05-08
awk杂谈之数组习题
2021-05-08
Linux网络属性配置详解
2021-05-08
Python(三十)类的理解
2021-05-08
Extjs布局详解
2021-05-08
Android数据库
2021-05-08
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
2021-05-08
keil左侧文件调整方法
2021-05-08
本地分支关联远程分支
2021-05-08
STM8 GPIO模式
2021-05-08