vue数据监听解析Object.defineProperty与Proxy区别

 更新时间:2023年03月13日 09:13:54   作者:可畏  
这篇文章主要为大家介绍了vue数据监听解析Object.defineProperty Proxy源码示例,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

前言

总能深深感觉到自己能力有限,写这篇文章的目的纯粹是因为发现在实际工作中,和一些小伙伴交流时发现,虽然有些小伙伴大概知道 vue2vue3 的区别,但并没有去进一步思考一些深一点的东西。尽管能力有限,但想着自己在起步时候的艰难,就想着分享一下自己的一些看法,虽然不一定有多深入,但能引起大家的一些思考也是好的。

Object.defineProperty 与 Proxy 的区别

其实在 api 的命名上就能看出端倪,Object.defineProperty 顾名思义,是与对象和属性有关的。 vue2 就是利用 definePropertysetget 方法去监听对象属性变化的。 而 Proxy 是直接去监听一个对象的。

注意:他们在这里的区别就是 Object.defineProperty 监听的是对象的属性,而 Proxy 监听的是这个对象本身

在使用上的差异

如上所述,Object.defineProperty 监听的是对象的属性, 但是监听属性只能遍历监听对象已有的属性,对于可能新增的属性,vue2 是没有办法监听的,页面自然也就不会更新。 所以为了解决这个问题 vue2 提供了 set 方法,当新增属性时,可以通过 set 方法为新增的属性添加监听器。
Proxy 带来的问题就是由于监听的是一个对象,自然能监听对象的所有属性变化,那么也就不再需要 set 这个方法了。

但是由于监听的是对象,所以没法处理基础类型。当我们使用 ref(false) 去创建一个基本类型的响应式变量时,本质相当于 reactive({value: false})。于是 Vue3 有了一个很奇怪的现象, 明明想用 ref 方法监听一个基础类型,却需要通过 .value 才能获取到具体值。

总结与思考

总的来说,Proxy 虽然解决了 set 的坑,但是又埋下了 ref 的坑,那么 Proxy 值得使用吗?

我的理解是值得的。原因就是同样监听一个对象,之前要为每个属性设置监听器,现在不需要了,性能和属性管理成本都能直线下降。

以上就是 vue数据监听解析Object.defineProperty与Proxy区别的详细内容,更多关于 vue数据监听的资料请关注脚本之家其它相关文章!

相关文章

  • vue cli3.x打包后如何修改生成的静态资源的目录和路径

    vue cli3.x打包后如何修改生成的静态资源的目录和路径

    这篇文章主要介绍了vue cli3.x打包后如何修改生成的静态资源的目录和路径,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-04-04
  • vue.js-div滚动条隐藏但有滚动效果的实现方法

    vue.js-div滚动条隐藏但有滚动效果的实现方法

    下面小编就为大家分享一篇vue.js-div滚动条隐藏但有滚动效果的实现方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-03-03
  • VUE前端导出文件之file-saver插件安装使用教程

    VUE前端导出文件之file-saver插件安装使用教程

    这篇文章主要给大家介绍了关于VUE前端导出文件之file-saver插件安装使用的相关资料,file-saver是一个用于保存文件的JavaScript库,它提供了一种简单的方式来生成和保存文件,支持各种文件类型,例如文本文件、图片、PDF等,需要的朋友可以参考下
    2024-05-05
  • Vue利用computed配合watch实现监听多个属性的变化

    Vue利用computed配合watch实现监听多个属性的变化

    这篇文章主要给大家介绍了在Vue中巧用computed配合watch实现监听多个属性的变化的方法,文中有详细的代码示例供大家参考,具有一定的参考价值,需要的朋友可以参考下
    2023-10-10
  • web项目开发中2个Token原因解析及示例代码

    web项目开发中2个Token原因解析及示例代码

    这篇文章主要介绍了web项目开发中会出现2个Token原因的解析以及实现的示例代码,有需要的同学可以借鉴参考下,希望可以有所帮助
    2021-09-09
  • vue中路由跳转的方式有哪些你知道吗

    vue中路由跳转的方式有哪些你知道吗

    这篇文章主要为大家介绍了vue路由跳转的方式,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-11-11
  • 聊聊element-ui 侧边栏的router问题

    聊聊element-ui 侧边栏的router问题

    这篇文章主要介绍了关于element-ui 侧边栏的router问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-05-05
  • vue实现验证码倒计时按钮

    vue实现验证码倒计时按钮

    这篇文章主要为大家详细介绍了vue实现验证码倒计时按钮,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-08-08
  • vue 行为验证码之滑动验证AJ-Captcha使用详解

    vue 行为验证码之滑动验证AJ-Captcha使用详解

    这篇文章主要介绍了vue 行为验证码之滑动验证AJ-Captcha使用详解,AJ-Captcha不需要npm安装,只需要将组件 verifition复制到所使用的components目录下,本文给大家详细讲解,需要的朋友可以参考下
    2023-05-05
  • JS 函数的 call、apply 及 bind 超详细方法

    JS 函数的 call、apply 及 bind 超详细方法

    这篇文章主要描述JS 函数的 call、apply 及 bind 方法的超详细解说,感兴趣的朋友可以参考下文,希望能帮助到您
    2021-08-08

最新评论