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

Proxy 和 Object.defineProperty 的区别是啥?

ProxyObject.defineProperty 都可以用来拦截和操作对象的属性访问,但它们在功能、灵活性和适用场景上有显著的区别。

1. Object.defineProperty

功能

  • 用于定义或修改对象的属性,包括属性的值、可写性、可枚举性、可配置性等。
  • 主要用于对单个属性进行细粒度的控制。

使用场景

  • 对象属性的拦截和修改,例如:
    • 定义 getter 和 setter。
    • 修改属性的配置。

示例代码

const obj = {};
Object.defineProperty(obj, 'name', {value: 'Alice',writable: true,enumerable: true,configurable: true,
});console.log(obj.name); // Alice

Object.defineProperty(obj, 'name', {get() {return 'Bob';}
});console.log(obj.name); // Bob 

限制

  • 只对定义的属性有效,不能拦截对对象的整体访问或操作。
  • 需要针对每个属性分别进行定义,无法一次性处理多个属性或整个对象。

2. Proxy

功能

  • 用于创建一个代理对象,该对象可以拦截并自定义对目标对象的基本操作(如属性访问、赋值、删除等)。
  • 提供了更多的拦截能力和灵活性,支持对整个对象的操作。

使用场景

  • 可以用来拦截和修改对象的所有操作,例如:
    • 属性的读取、赋值、删除。
    • 函数调用。
    • 目标对象的创建和扩展。

示例代码

const target = {name: 'Alice'
};const handler = {get(target, property) {return property in target ? target[property] : 'Default';},set(target, property, value) {target[property] = value.toUpperCase();return true;}
};const proxy = new Proxy(target, handler);console.log(proxy.name); // Alice
proxy.name = 'Bob';
console.log(proxy.name); // BOB
console.log(proxy.age); // Default 

优点

  • 可以拦截对象的所有操作,提供更全面的控制。
  • 可以动态地应用拦截逻辑,不需要修改原始对象的定义。
http://www.jsqmd.com/news/1322620/

相关文章:

  • Vue中,created和mounted两个钩子之间调用时间差值受什么影响?
  • 5分钟终极指南:使用TegraRcmGUI图形化工具轻松为Switch注入Payload
  • VLAN间路由排错实战:从SVI配置到OSPF故障定位
  • Open-Source Information Retrieval Courses @ TU Wien:从基础到前沿的完整学习指南
  • 3分钟快速上手:Universal Android Debloater安卓系统精简终极教程
  • 广州中小微企业主经济犯罪律师哪个优秀:【法纳刑辩】尽善尽美 - 18102756859
  • Jetpack Compose Button 全解析:从声明式UI到自定义实战
  • Deep-Live-Cam技术突破:实时AI换脸与影视级视频处理实战指南
  • 广州职务类经济犯罪刑事律师哪个优秀:【法纳刑辩】硕果累累 - 18102756859
  • 2026年营销管理培训精选榜单:实战策略与业绩增长双驱动口碑之选! - 优企名品
  • 律师必学的AI法律检索底层逻辑:基于127万份裁判文书训练的向量语义建模全拆解
  • 2026年广东系统门窗厂家榜单:高端/智能/隔热/静音/极简/恒温/抗风/别墅/断桥铝/节能品牌精选推荐! - 优企名品
  • SeaTunnel Greenplum连接器:10亿级MPP数据库实时同步的技术革命
  • SE(3)等变模型在蛋白质结构生成中的突破与挑战
  • 广州大型企业高管经济犯罪律师哪个靠谱:【法纳刑辩】尽职尽责 - 17728098551
  • “肝”出一篇万字文献综述!结合GPT-5辅助全流程写作,实测有用,效率质量直接拉满(附AI提示词)
  • 十五天
  • Text2Video-Zero:零样本视频生成革命,用文字创造动态世界
  • 局域网DNS劫持排查与复现:从172.31.255.254解析异常到ARP欺骗防御
  • MMRotate实战:从零构建自定义旋转目标检测数据集与模型训练
  • 终极Mac清理优化工具Mole:如何快速释放95GB存储空间?
  • 欧洲卡车模拟2自动驾驶辅助插件:终极智能驾驶体验完整指南
  • 玻利维亚的EOR名义雇主服务商是什么?主要有哪些特点?
  • 微信机器人终极指南:5分钟快速搭建AI智能助手
  • 解锁小程序 computed 属性:gh_mirrors/co/computed 让数据处理更简洁高效
  • 2026年8月重庆优质的配电箱优质厂家哪个好,工控开关电源/注塑机专用变频器/变压器/UPS电源,配电箱品牌哪家靠谱 - 品牌推荐师
  • 【AI编程接单变现指南】:20年技术老兵亲授从零到月入5万的7个关键步骤
  • 从Windows到iOS:Obsidian Fast Note Sync多平台无缝同步完整教程
  • 突破性暗黑3自动化辅助架构:从技能连点到智能分解的深度优化方案
  • 硬件工程师必备:常用存储器选型、设计与避坑实战指南