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是一款自动视频编辑工具可以将文本、文章或故事转换为视频。