当前位置:首页 » 操作系统 » vuejs源码分析

vuejs源码分析

发布时间: 2023-07-14 20:20:37

⑴ vuejs源码用了什么设计模式,具体点的

最简单的订阅者模式

// Observer
class Observer {
constructor (data) {
this.walk(data)
}
walk (data) {
// 遍历
let keys = Object.keys(data)
for(let i = 0; i < keys.length; i++){
defineReactive(data, keys[i], data[keys[i]])
}
}
}

function defineReactive (data, key, val) {
observer(val)

// dep 为什么要在这里实例化, 就是为了实现, 对象每一层的 每一个key都有自己的一个订阅实例, 比如 a.b 对应 dep1, a.c 对应dep2, 这里虽然都是let dep = new Dep()
// 但每次来到这个方法, dep都是独立的, 会一直保留在内存. 这样在每次调用set方法都能找到这个a.b对应的dep
// dep 这里会一直保存, 是因为闭包的关系, Object这个全局的函数, 引用了上层的作用域, 这个作用域包含了 dep, 除非Object = null, 或者退出浏览器, dep才会消失

//实例化之后, dep就有了被订阅, 和发布消息的功能, dep不写在这里也是可以的, 多定义一个全局函数, 每次obser的时候增加一个dep
let dep = new Dep()
Object.defineProperty(data, key, {
enumerable: true,
configurable: true,
get: function () {
//每次new Watch('a.b'), 都会先执行get方法, 进而来到这里, 触发 dep.depend(), 这个dep就是 a.b 对应的 订阅,
dep.depend()
return val
},
set: function (newVal) {
if(val === newVal){
return

热点内容
如何关掉广告推送安卓 发布:2025-03-16 19:43:32 浏览:956
安卓如何关闭定时开机 发布:2025-03-16 19:23:54 浏览:292
酷派4g网络怎么设置密码 发布:2025-03-16 19:17:53 浏览:664
java培训费用 发布:2025-03-16 19:17:12 浏览:586
搜安卓手机如何 发布:2025-03-16 19:03:31 浏览:685
卡西欧相机存储卡异常 发布:2025-03-16 18:54:10 浏览:916
69hz的电脑玩吃鸡如何调配置 发布:2025-03-16 18:52:37 浏览:915
java的append 发布:2025-03-16 18:51:52 浏览:932
h5本地数据库 发布:2025-03-16 18:43:59 浏览:595
编程器资源 发布:2025-03-16 17:59:48 浏览:904