Object.defineProperty 仅能为对象的单个已有属性添加 getter/setter 拦截,适用于精确控制读写行为(如日志、校验),但无法拦截新增/删除属性、数组操作或嵌套对象,Vue 2 基于此实现响应式,Vue 3 则改用 Proxy 全面替代。可以用 Object.defineProperty 为对象的**单个属性**添加 getter/setter 拦截器,但无法直接拦截对象的新增属性、删除属性、枚举等整体操作------那是 Proxy 的职责。重点在于:它适用于精确控制某个已有属性的读写行为。为已有属性添加 getter/setter 拦截这是最常用场景:在不改变属性值的前提下,插入自定义逻辑(如日志、校验、依赖收集)。必须先确保目标属性存在(或用 configurable: true 允许后续修改) 调用 Object.defineProperty(obj, key, descriptor),其中 descriptor 至少含 get 或 set 若原属性是可写的,建议保留 writable: false(因为定义了 getter/setter 后,writable 自动失效)示例:const obj = { name: 'Alice' };Object.defineProperty(obj, 'name', { get() { console.log('读取 name'); return this._name || ''; }, set(val) { console.log('设置 name 为:', val); this._name = String(val).trim(); }, configurable: true // 允许后续重新定义});obj.name = ' Bob '; // 输出:设置 name 为: Bob console.log(obj.name); // 输出:读取 name → 'Bob'给新属性添加拦截(非覆盖原有值)如果对象原本没有该属性,也能用 defineProperty 添加带拦截器的属性,但需注意默认不可枚举、不可配置、不可写。 Tellers AI Tellers是一款自动视频编辑工具,可以将文本、文章或故事转换为视频。
相关推荐
CTA量化套保6 小时前
近期零基础量化学习:先分阶段,再用 AI 检查缺口清水白石0087 小时前
Python 死锁排查全攻略:从线程卡死到锁依赖定位与工程化修复杨运交7 小时前
[060][调度模块]Redisson vs Redis 原生锁:两种分布式锁实现深度对比FungLeo7 小时前
Node 后端实战 · 列表查询到底怎么写?一个通用 DSL 封装,过滤分页排序一次搞定Elias不吃糖7 小时前
Langfuse 入门:Trace、Prompt、Dataset、Experiment、EvaluatorTechWayfarer8 小时前
批量查IP归属地,在线API、脚本、离线库怎么选?三种方案实测对比抓蛙师8 小时前
多租户 tenant_id SQL 注入漏洞分析与应急响应报告ACP广源盛139246256738 小时前
Qwen3.8‑2.4T 开源落地@ACP#国产 MoE 私有化部署下 GSV2221 视频转换芯片机遇分析七牛开发者9 小时前
为什么 Go 很适合 AI 辅助开发?河南凹凸环境艺术设计9 小时前
性价比高的民宿酒店设计企业