常见的vue面试中的proxy和object.defineProperty的区别

简介: 常见的vue面试中的proxy和object.defineProperty的区别

1.针对这两个去劫持vue中的数据持有缺点和区别

    (1) object.defineProperty:  在对于一些属性来说使用object.defineProperty是无法截取到的,比如通过下标的方式修改数组中的数据或给对象新增属性,这都不能触发组件的渲染,因为object.defineProperty不能拦截到这些操作,更精准来说对于数组而言,大部分的操作是无法去拦截到的,只能通过vue的重写函数来去解决

object.defineProperty 的优点:

  1. 灵活性:Object.defineProperty() 允许您为对象定义不同的访问模式,例如只读、只写或可读写。
  2. 属性描述符:Object.defineProperty() 允许您为对象定义属性描述符,这可以控制属性的访问、修改和删除。
  3. 访问器:Object.defineProperty() 允许您为对象定义访问器,这可以自定义属性的访问行为。
  4. 防止意外覆盖:使用 Object.defineProperty() 可以防止在对象上定义相同名称的属性,从而避免意外覆盖现有属性。

object.defineProperty 的缺点

  1. 性能:由于 Object.defineProperty() 需要额外的操作,因此在大量属性的情况下,可能会影响性能。
  2. 学习曲线:Object.defineProperty() 是一种相对较新的方法,因此在一些开发者和团队中可能需要额外的学习和适应。
  3. 属性描述符的局限性:虽然属性描述符可以控制属性的访问、修改和删除,但它们不能为属性提供默认值或指定属性值的类型。
  4. 访问器的局限性:虽然访问器可以自定义属性的访问行为,但它们不能为属性提供默认值或指定属性值的类型。

     (2) proxy: 在vue3中不在使用这个方法了而是通过proxy对对象进行代理,从而实现数据劫持。使用proxy的好处就是可以监听到任何方式的数据变化

       优点:

  1. 隐藏真实目标地址:代理可以隐藏真实的目标地址,从而保护隐私。用户只知道代理的地址,而不知道真实的目标地址。
  2. 限制访问:代理可以限制对特定资源的访问,例如限制特定网站的访问。
  3. 控制访问行为:代理可以控制访问的行为,例如限制访问速度、限制访问次数等。

然而,代理也有其缺点:

  1. 增加延迟:由于数据需要经过代理服务器进行处理,因此数据传输速度可能会 slower than direct access.
  2. 增加复杂性:使用代理需要进行额外的配置和设置,这可能会增加使用代理的复杂性和难度。
  3. 数据安全性:代理可能会受到中间人攻击(MitM Attack)的影响,从而导致数据被篡改或泄露。
  4. 数据隐私保护:虽然代理可以保护用户的隐私,但如果代理服务器被恶意攻击,用户的隐私仍然可能会泄露。
  5. 代理服务器故障:代理服务器可能会因为故障或维护而无法提供服务,这可能会导致用户无法访问目标资源。

       缺点:兼容性不如object.definProperty() Proxy是es6的语法

总的来说在vue3中都是在使用的proxy进行数据劫持

相关文章
|
3天前
|
Android开发 Kotlin
Android经典面试题之Kotlin的==和===有什么区别?
本文介绍了 Kotlin 中 `==` 和 `===` 操作符的区别:`==` 用于比较值是否相等,而 `===` 用于检查对象身份。对于基本类型,两者行为相似;对于对象引用,`==` 比较值相等性,`===` 检查引用是否指向同一实例。此外,还列举了其他常用比较操作符及其应用场景。
157 93
|
7天前
|
JavaScript 索引
Vue 2和Vue 3的区别以及实现原理
Vue 2 的响应式系统通过Object.defineProperty来实现,它为对象的每个属性添加 getter 和 setter,以便追踪依赖并响应数据变化。
22 9
|
1天前
|
Java 关系型数据库 MySQL
面试官:GROUP BY和DISTINCT有什么区别?
面试官:GROUP BY和DISTINCT有什么区别?
14 0
面试官:GROUP BY和DISTINCT有什么区别?
|
11天前
|
缓存 JavaScript 前端开发
【多线程面试题十】、说一说notify()、notifyAll()的区别
notify()唤醒单个等待对象锁的线程,而notifyAll()唤醒所有等待该对象锁的线程,使它们进入就绪队列竞争锁。
|
17天前
|
JavaScript 前端开发 编译器
对Vue2 与 Vue3 的区别的理解
【9月更文挑战第3天】对Vue2 与 Vue3 的区别的理解
18 0
|
20天前
|
JavaScript 前端开发
Object.freeze() 和 const 的区别详解
【8月更文挑战第31天】
23 0
|
21天前
|
JavaScript 前端开发 开发者
Vue.js 响应式变革来袭!结合热点技术,探索从 Object.defineProperty 到 Proxy 的奇妙之旅,触动你的心
【8月更文挑战第30天】在 Vue.js 中,响应式系统自动追踪并更新数据变化,极大提升了开发体验。早期通过 `Object.defineProperty` 实现,但存在对新旧属性处理及数组操作的局限。Vue 3.0 引入了 `Proxy`,克服了上述限制,提供了更强大的功能和更好的性能。实践中,可根据项目需求选择合适的技术方案,并优化数据操作,利用懒加载等方式提升性能。
28 0
|
30天前
|
算法 Java
【多线程面试题十八】、说一说Java中乐观锁和悲观锁的区别
这篇文章讨论了Java中的乐观锁和悲观锁的区别,其中悲观锁假设最坏情况并在访问数据时上锁,如通过`synchronized`或`Lock`接口实现;而乐观锁则在更新数据时检查是否被其他线程修改,适用于多读场景,并常通过CAS操作实现,如Java并发包`java.util.concurrent`中的类。