Vue源码学习之Obsever

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

回到顶部