
实现一个简易Vue(二)Observer
发布日期:2021-05-07 18:33:29
浏览次数:24
分类:精选文章
本文共 994 字,大约阅读时间需要 3 分钟。
2. Observer
- 功能
- 负责把 data 选项中的属性转换成响应式数据
- data 中的某个属性也是对象,把该属性转换成响应式数据
- 数据变化发送通知
- 代码
class Observer { constructor(data) { this.walk(data) } // 遍历 data 对象的所有属性 walk(data) { // 1. 判断 data 是否是对象 if (!data || typeof data !== 'object') { return } // 2. 遍历 data 对象的所有属性 Object.keys(data).forEach(key => { this.defineReactive(data, key, data[key]) }) } defineReactive(obj, key, val) { let that = this // 负责收集依赖,并发送通知 let dep = new Dep() // 如果 val 是对象,把 val 内部的属性转换成响应式数据 this.walk(val) Object.defineProperty(obj, key, { enumerable: true, // 可枚举 configurable: true, // 可配置 get() { // 收集依赖 Dep.target && dep.addSub(Dep.target) return val }, set(newValue) { // 数据没有发生变化 return 停止执行 if (newValue === val) { return } val = newValue // 使新设置的值也拥有 get 和 set 方法 that.walk(newValue) // 发送通知 dep.notify() } }) }}
发表评论
最新留言
路过按个爪印,很不错,赞一个!
[***.219.124.196]2025年03月29日 05时19分37秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
awk杂谈之数组习题
2021-05-08
Linux网络属性配置详解
2021-05-08
Python(三十)类的理解
2021-05-08
Extjs布局详解
2021-05-08
Android数据库
2021-05-08
C语言之指针再涉(二)
2021-05-08
application类
2021-05-08
Linux基础命令(十四)软件安装的后续
2021-05-08
Perl(二)Perl简介
2021-05-08
HTML基础,块级元素/行内元素/行内块元素辨析【2分钟掌握】
2021-05-08
keil左侧文件调整方法
2021-05-08
本地分支关联远程分支
2021-05-08
函数求偏移量
2021-05-08
STM8 GPIO模式
2021-05-08
python多态和封装
2021-05-08
STM32boot启动
2021-05-08
.netcore-abp-其它开源模块
2021-05-08
.net core2.2 SignalR多人聊天
2021-05-08
回调函数(callback function)
2021-05-08