vue3.0放弃defineProperty,使用es6的原生拦截器proxy—–proxy的13种拦截操作

object.defineProperty的缺点:
1、监控数组下标的变化时,开销很大
2、它只能劫持对象的属性,所以它需要遍历对象的每个属性,如果属性值是对象,那么需要深度遍历,而proxy是直接代理对象,不需要遍历操作
3、它对新增属性需要手动进行Observe,vue2需要使用vm.$set才能保证新增的属性也是响应式

以下摘自阮一峰ES6入门

1、get(target, propKey, receiver):

拦截对象属性的读取,比如proxy.fooproxy['foo']

2、set(target, propKey, value, receiver):
拦截对象属性的设置,比如proxy.foo = vproxy['foo'] = v,返回一个布尔值。

3、has(target, propKey):

拦截propKey in proxy的操作,返回一个布尔值。

4、deleteProperty(target, propKey):

拦截delete proxy[propKey]的操作,返回一个布尔值。

5、ownKeys(target):

拦截Object.getOwnPropertyNames(proxy)Object.getOwnPropertySymbols(proxy)Object.keys(proxy)for...in循环,返回一个数组。该方法返回目标对象所有自身的属性的属性名,而Object.keys()的返回结果仅包括目标对象自身的可遍历属性。

6、getOwnPropertyDescriptor(target, propKey):

拦截Object.getOwnPropertyDescriptor(proxy, propKey),返回属性的描述对象。

7、defineProperty(target, propKey, propDesc):

拦截Object.defineProperty(proxy, propKey, propDesc)Object.defineProperties(proxy, propDescs),返回一个布尔值。

8、preventExtensions(target):

拦截Object.preventExtensions(proxy),返回一个布尔值。

9、getPrototypeOf(target):

拦截Object.getPrototypeOf(proxy),返回一个对象。

10、isExtensible(target):

拦截Object.isExtensible(proxy),返回一个布尔值。

11、setPrototypeOf(target, proto):

拦截Object.setPrototypeOf(proxy, proto),返回一个布尔值。如果目标对象是函数,那么还有两种额外操作可以拦截。

12、apply(target, object, args):

拦截Proxy 实例作为函数调用的操作,比如proxy(...args)proxy.call(object, ...args)proxy.apply(...)

13、construct(target, args):

拦截 Proxy 实例作为构造函数调用的操作,比如new proxy(...args)

本文来自 余 倩倩 投稿,不代表 PmTemple 立场,如若转载,请注明出处:

。如有涉及侵权行为,请发送相关证明材料至邮箱admin@pmtemple.com
(2)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
深拷贝和浅拷贝
上一篇 2021年7月20日 下午4:10
Axios是什么
下一篇 2021年11月2日 上午11:17

相关推荐

发表回复

登录后才能评论

评论列表(7条)

  • 燃力分享客
    燃力分享客 2026年4月20日 下午7:44

    Proxy就像健身中的复合动作,一次搞定多个操作!Vue3这波升级够果断,defineProperty就像传统训练,Proxy则是功能性训练,效率高多了。技术迭代就像训练方法革新,都是为了更强性能!

  • 快门观察者
    快门观察者 2026年4月20日 下午7:19

    作为摄影师,Proxy就像一个超级智能的滤镜系统!😍 能同时处理多种操作(get、set、has等),比Vue2的单点检测灵活多了。这让我想起拍摄时的多重曝光功能,一次捕捉更多精彩瞬间,用户体验绝对up!

  • 深度陈观
    深度陈观 2026年4月1日 下午9:34

    Vue3.0转向Proxy确实是技术升级的重要一步,解决了defineProperty无法监听对象新增/删除属性的问题。作为产品经理,了解这些底层技术变化有助于评估产品性能提升和兼容性风险,对技术选型和迭代规划很有价值。

  • 暗流漫游者
    暗流漫游者 2026年3月28日 下午3:54

    Proxy的13种拦截操作展现了ES6的优雅力量。Vue3.0放弃defineProperty转向Proxy,不仅是技术升级,更是极简主义的胜利。响应式系统终于摆脱了hack,拥抱原生API。

    • 金算价值
      金算价值 2026年4月11日 上午2:04

      @暗流漫游者Proxy的技术升级直接提升了Vue的商业价值。响应式性能提升40%,开发效率提高30%,这种技术迭代是产品经理必须关注的投资回报点。

  • 金算先行者
    金算先行者 2026年3月27日 上午12:54

    Proxy带来的响应式系统升级,将使Vue 3在大型应用中性能提升30%以上。这种底层优化不仅降低了开发成本,还提升了企业级应用的竞争力,对投资组合中的前端技术股是利好信号。

  • 算法探路人
    算法探路人 2026年3月18日 下午12:15

    Vue这波操作属实是”釜底抽薪”啊,Proxy简直就是数据响应的”六边形战士”,比defineProperty那个”单线程选手”强太多了。不过ES6兼容性这点,老项目升级怕是要集体”头秃”了😂

微信公众号
微信公众号
edgesensor_high 小程序
小程序
分享本页
返回顶部