当前位置: 首页 > news >正文

computed和methods有什么区别

面试题:computed和methods有什么区别

标准而浅显的回答

  1. 在使用时,computed当做属性使用,而methods则当做方法调用
  2. computed可以具有getter和setter,因此可以赋值,而methods不行
  3. computed无法接收多个参数,而methods可以
  4. computed具有缓存,而methods没有

更接近底层原理的回答

vue对methods的处理比较简单,只需要遍历methods配置中的每个属性,将其对应的函数使用bind绑定当前组件实例后复制其引用到组件实例中即可

而vue对computed的处理会稍微复杂一些。

当组件实例触发生命周期函数beforeCreate后,它会做一系列事情,其中就包括对computed的处理

它会遍历computed配置中的所有属性,为每一个属性创建一个Watcher对象,并传入一个函数,该函数的本质其实就是computed配置中的getter,这样一来,getter运行过程中就会收集依赖

但是和渲染函数不同,为计算属性创建的Watcher不会立即执行,因为要考虑到该计算属性是否会被渲染函数使用,如果没有使用,就不会得到执行。因此,在创建Watcher的时候,它使用了lazy配置,lazy配置可以让Watcher不会立即执行。

收到lazy的影响,Watcher内部会保存两个关键属性来实现缓存,一个是value,一个是dirty

value属性用于保存Watcher运行的结果,受lazy的影响,该值在最开始是undefined

dirty属性用于指示当前的value是否已经过时了,即是否为脏值,受lazy的影响,该值在最开始是true

Watcher创建好后,vue会使用代理模式,将计算属性挂载到组件实例中

当读取计算属性时,vue检查其对应的Watcher是否是脏值,如果是,则运行函数,计算依赖,并得到对应的值,保存在Watcher的value中,然后设置dirty为false,然后返回。

如果dirty为false,则直接返回watcher的value

巧妙的是,在依赖收集时,被依赖的数据不仅会收集到计算属性的Watcher,还会收集到组件的Watcher

当计算属性的依赖变化时,会先触发计算属性的Watcher执行,此时,它只需设置dirty为true即可,不做任何处理。

由于依赖同时会收集到组件的Watcher,因此组件会重新渲染,而重新渲染时又读取到了计算属性,由于计算属性目前已为dirty,因此会重新运行getter进行运算

而对于计算属性的setter,则极其简单,当设置计算属性时,直接运行setter即可

http://www.lryc.cn/news/178331.html

相关文章:

  • MySQL索引分类和操作(增删查)、聚集索引、二级索引(索引篇 二)
  • (三)Python变量类型和运算符
  • vue三种import导入方式详解?
  • 深入理解数据库视图
  • Java中@before和setup()方法的作用~
  • 前端uniapp防止页面整体滑动页面顶部以上,设置固定想要固定区域宽高
  • 浮点型数字
  • 贝叶斯统计入门
  • 织梦CMS采集插件-DEDE插件大全
  • vuereact质检工具(eslint)安装使用总结
  • yolox相关
  • 递归专题训练详解(回溯,剪枝,深度优先)
  • JavaScript系列从入门到精通系列第七篇:JavaScrip当中的运算符,主要涉及JavaScript当中的六大数据类型的四则运算
  • 计算机网络 实验二 交换机的基本配置
  • Tor网络的全面解析
  • 数据集笔记:2015上海地铁一卡通数据
  • 【小沐学C++】C++ 基于Premake构建工程项目(Windows)
  • Linux shell编程学习笔记2:我是谁 | who am i ?
  • 移动端和PC端对比【组件库+调试vconsole +单位postcss-pxtorem+构建vite/webpack+可视化echarts/antv】
  • maven多模块依赖包程序包xxx不存在
  • iOS17.0.2更新修复iPhone 15系列机型数据迁移问题,附新机快速数据迁移办法!
  • 面试题库(八):docker和linux
  • 深入理解传输层协议:TCP与UDP的比较与应用
  • Python-表白小程序练习
  • 浅谈ChatGPT附免费体验地址
  • 队列的使用以及模拟实现(C++版本)
  • RV1126笔记四十一:RV1126移植LIVE555
  • stable diffusion模型评价框架
  • 电脑开机慢问题的简单处理
  • SpringMVC-Rest风格