<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>数据劫持 on ZiYang FrontEnd Interview</title><link>https://fe-interview.pangcy.cn/tags/%E6%95%B0%E6%8D%AE%E5%8A%AB%E6%8C%81/</link><description>Recent content in 数据劫持 on ZiYang FrontEnd Interview</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 06 Mar 2025 13:07:39 +0800</lastBuildDate><atom:link href="https://fe-interview.pangcy.cn/tags/%E6%95%B0%E6%8D%AE%E5%8A%AB%E6%8C%81/index.xml" rel="self" type="application/rss+xml"/><item><title>Proxy替代Object.defineProperty的原因</title><link>https://fe-interview.pangcy.cn/docs/framework/vue3/vue3-02/</link><pubDate>Tue, 04 Mar 2025 07:00:31 +0000</pubDate><guid>https://fe-interview.pangcy.cn/docs/framework/vue3/vue3-02/</guid><description>&lt;h2 id="考察点分析">考察点分析 &lt;a href="#%e8%80%83%e5%af%9f%e7%82%b9%e5%88%86%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>该题主要考查候选人以下核心能力：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>响应式原理理解&lt;/strong>：对比新旧响应式方案的实现差异&lt;/li>
&lt;li>&lt;strong>ES6新特性掌握&lt;/strong>：Proxy和Reflect API的实际应用&lt;/li>
&lt;li>&lt;strong>框架演进洞察力&lt;/strong>：理解架构升级背后的工程考量&lt;/li>
&lt;/ol>
&lt;p>具体技术评估点包括：&lt;/p>
&lt;ul>
&lt;li>Object.defineProperty在数组监听和动态属性上的局限性&lt;/li>
&lt;li>Proxy在深层对象代理中的按需响应机制&lt;/li>
&lt;li>属性删除、数组索引修改等边缘场景的处理差异&lt;/li>
&lt;li>响应式系统性能优化的实现原理&lt;/li>
&lt;/ul>
&lt;hr>
&lt;h2 id="技术解析">技术解析 &lt;a href="#%e6%8a%80%e6%9c%af%e8%a7%a3%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;h3 id="关键知识点">关键知识点 &lt;a href="#%e5%85%b3%e9%94%ae%e7%9f%a5%e8%af%86%e7%82%b9" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>Proxy &amp;gt; Object.defineProperty &amp;gt; 数组方法重写 &amp;gt; 响应式初始化性能&lt;/p>
&lt;h3 id="原理剖析">原理剖析 &lt;a href="#%e5%8e%9f%e7%90%86%e5%89%96%e6%9e%90" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;p>Object.defineProperty通过劫持对象属性的getter/setter实现响应式，但存在三个致命缺陷：&lt;/p>
&lt;ol>
&lt;li>&lt;strong>数组监听缺陷&lt;/strong>：只能通过重写数组原型方法拦截变更，无法检测索引赋值（arr[2]=1）和length变化&lt;/li>
&lt;li>&lt;strong>属性新增无效&lt;/strong>：初始化后添加的属性无法自动响应，必须使用Vue.set&lt;/li>
&lt;li>&lt;strong>性能瓶颈&lt;/strong>：递归转换整个对象所有属性，造成初始化性能损耗&lt;/li>
&lt;/ol>
&lt;p>Proxy通过创建对象代理层，使用Reflect实现操作转发，优势显著：&lt;/p>



 
 
 

 
 
 
 

 

 &lt;div class="prism-codeblock ">
 &lt;pre id="5e5df29" class="language-javascript ">
 &lt;code>const proxy = new Proxy(obj, {
 get(target, key) {
 track(target, key) // 依赖收集
 // 嵌套对象延迟代理（提升性能关键）
 return isObject(res) ? reactive(res) : res 
 },
 set(target, key, value) {
 trigger(target, key) // 触发更新
 return Reflect.set(...arguments)
 }
})&lt;/code>
 &lt;/pre>
 &lt;/div>
&lt;h3 id="常见误区">常见误区 &lt;a href="#%e5%b8%b8%e8%a7%81%e8%af%af%e5%8c%ba" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h3>&lt;ol>
&lt;li>误认为Proxy可以直接代理嵌套对象（实际需要递归代理）&lt;/li>
&lt;li>混淆数组方法重写与Proxy原生拦截的区别&lt;/li>
&lt;li>忽视Reflect在保持代理行为一致性中的作用&lt;/li>
&lt;/ol>
&lt;hr>
&lt;h2 id="问题解答">问题解答 &lt;a href="#%e9%97%ae%e9%a2%98%e8%a7%a3%e7%ad%94" class="anchor" aria-hidden="true">&lt;i class="material-icons align-middle">link&lt;/i>&lt;/a>&lt;/h2>&lt;p>Vue3选用Proxy主要因其解决了三大核心问题：&lt;/p></description></item></channel></rss>