不同代理创建、内部属性标识、缓存对象、拦截方法都不一样, 这里归纳整理一下类型创建函数是否只读缓存对象普通类型handlers集合类型handlers响应式代理reactivefalsereactiveMapget...对于 Symbol 上的一些内置方法的调用.对于 Vue3 中的 ref 对象, 这里说的不是模版引用的 ref, 是响应式的 ref, 一般是用响应式代理属性的 __v_isRef 标识位来区分, 一般通过...ref对象, 一般会是 computed 计算类型的属性, 如果一个 proxy 包含该属性, 是不能对其重新赋值成非计算属性的, 直接来看个例子const state = reactive({ a:...set 拦截方法的差异性get拦截类型对应函数是获取原始值处理trigger的add处理trigger的set响应式代理set是响应式对象值新增响应式对象值变化只读代理readonlySet否否否浅层响应式代理...在实现上, 主要区分了只读属性和非只读属性两种代理只读属性的代理: 对 deleteProperty 删除属性这种操作都是禁止的, has、ownKeys没有进行拦截非只读属性的代理: 会对三个方法进行依赖收集