Vue中的computed是如何实现的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue中的computed是如何实现的相关的知识,希望对你有一定的参考价值。

参考技术A 流程总结如下:

1、当组件初始化的时候,computed和data会分别建立各自的响应系统,Observer遍历data中每个属性设置get/set数据拦截。

2、初始化computed会调用initComputed函数

        ①    注册一个watcher实例,并实例化一个Dep消息订阅器用作后续收集依赖(比如渲染函数的watcher或者其他观察该计算属性变化的watcher)。

        ②    调用计算属性时会触发其Object.defineProperty的get访问器函数。

        ③    调用watcher.depend()方法向自身的消息订阅器dep的subs中添加其他属性的watcher。

        ④    调用watcher的evaluate方法(进而调用watcher的get方法)让自身成为其他watcher的消息订阅器的订阅   者,首先将watcher赋值给dep.target,然后执行getter求值函数,当访问求值函数里面的属性(比如来自data、props或其他computed)时,会同样触发它们的get访问器函数从而将该计算属性的watcher添加到求值函数中属性的watcher的消息订阅器dep中,当这些操作完成,最后关闭Dep.target赋值为null并返回求值函数结果。

3、当某个属性发生变化,触发set拦截函数,然后调用自身消息订阅器dep的notify方法,遍历当前dep中保存着所有订阅者watcher的subs数组,并逐个调用watcher的update方法,完成响应更新。

        

vue 如何给computed一个默认值

参考技术A computed是计算属性,是通过其它属性计算而来的结果。如果需要给默认值,那么就写一个判断语句,当正常逻辑返回的结果为空值时,返回你给的默认值即可。
这样讲不知道你明不明白

以上是关于Vue中的computed是如何实现的的主要内容,如果未能解决你的问题,请参考以下文章

解析Vue.js中的computed工作原理

vue 中的computed 和 watch 监听

vue中computed计算属性与methods对象中的this指针

vue2中computed原理

vue如何实现道路监控

vue 如何给computed一个默认值