Vue源码学习之Obsever
function Obsever(data) { Object.keys(data).forEach(key => defineReactive(data, key, data[key]))
}
function observe(data) {
if (typeof data !== 'object' || data === null) {
return
}
return new Obsever(data)
}
function defineReactive(obj, key, val) {
var dep = new Dep()
Object.defineProperty(obj, key, {
configurable: false,
enumerable: true,
get: function () {
Dep.target && dep.add(Dep.target)
return val
},
set: function (newValue) {
if (newValue !== val) {
val = newValue
dep.notify(newValue)
}
}
})
}
上述代码中关于defineReactive方法里面有一句:var dep = new Dep() 源码的注释写的是:
在闭包中定义一个dep对象
这里有点想不明白闭包的作用,如何使用的闭包,请求大神帮忙分析下
回答:
使用闭包是为了做缓存,保证 同一个 key 获取 或者 更新属性时,总是操作的同一个 dep
以上是 Vue源码学习之Obsever 的全部内容, 来源链接: utcz.com/p/936268.html