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

浅谈 proxy

应用场景

Vue2采用的defineProperty去实现数据绑定,Vue3则改为Proxy,遇到了什么问题?

- 在Vue2中不能检测数组和对象的变化

1. 无法检测 对象property 的添加或移除

var vm = new Vue({data:{a:1}
})// `vm.a` 是响应式的vm.b = 2
// `vm.b` 是非响应式的

2. 不能检测以下数组的变动 

  • 利用索引直接设置一个数组项时
  • 修改数组的长度
var vm = new Vue({data: {items: ['a', 'b', 'c']}
})
vm.items[1] = 'x' // 不是响应性的
vm.items.length = 2 // 不是响应性的

Vue 3 使用Proxy对象来实现响应式数据绑定和属性收集。Proxy可以代理整个对象,而不仅仅是对象的已有属性,并且能够更好地处理数组和新增属性等情况 

基本用法

defineProperty

      let a = 2;let b = 3;let c = a + b;const obj = {};console.log(c);Object.defineProperty(obj, 'a', {get() {return a;},set(newVal) {a = newVal;c= a+b},enumerable: true,configurable: true,});Object.defineProperty(obj, 'b', {get() {return b;},set(newVal) {b = newVal;c= a+b},enumerable: true,configurable: true,});obj['a'] = 10console.log(c);

 

Proxy

  let numArr = [3, 6, 9];numArr = new Proxy(numArr, {get(target, prop) {if (prop in target) {return target[prop];} else {return 0;}},});console.log(numArr[1]); // 6console.log(numArr[7]); // 0

 

最后

Proxy又有啥问题呢,为啥需要和Reflect配合? 我们后续再做探讨~

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

相关文章:

  • Ansys Maxwell:SheetScan - 导入材料特性曲线
  • 解决 Android 单元测试 No tests found for given includes:
  • 人工智能的核心思想-神经网络
  • JAVA中的Lamda表达式
  • 锂电池学习笔记(一) 初识锂电池
  • 深度学习2
  • 第六节-AppScan扫描报告
  • 【c++丨STL】stack和queue的使用及模拟实现
  • 基于SpringBoot的在线教育系统【附源码】
  • Kafka-副本分配策略
  • 市场波动不断,如何自我提高交易心理韧性?
  • 加速科技精彩亮相中国国际半导体博览会IC China 2024
  • 利用c语言详细介绍下选择排序
  • 华为流程L1-L6业务流程深度细化到可执行
  • bridge-multicast-igmpsnooping
  • git使用(一)
  • Linux环境安装MongoDB
  • Cyberchef使用功能之-多种压缩/解压缩操作对比
  • TypeScript 装饰器都有那些应用场景?如何更快的上手?
  • 堆优化版本的Prim
  • Ubuntu上安装MySQL并且实现远程登录
  • 蓝桥杯每日真题 - 第21天
  • (长期更新)《零基础入门 ArcGIS(ArcMap) 》实验一(下)----空间数据的编辑与处理(超超超详细!!!)
  • NLP论文速读(CVPR 2024)|使用DPO进行diffusion模型对齐
  • 操作系统——揭开盖子
  • 如何在 React 项目中应用 TypeScript?应该注意那些点?结合实际项目示例及代码进行讲解!
  • C++学习第四天
  • 【从零开始的LeetCode-算法】3232. 判断是否可以赢得数字游戏
  • 一种简单高效的RTSP流在线检测方法,不需要再过渡拉流就可以获取设备状态以及对应音视频通道与编码格式
  • 24/11/22 项目拆解 艺术风格转移