news 2026/5/26 14:40:51

Object.defineProperty和Proxy实现拦截的区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Object.defineProperty和Proxy实现拦截的区别

1.Object.definedProperty的实现拦截必须得声明一个额外的变量,例如下面这样

constobj={};let_data="这是一些数据";Object.defineProperty(obj,"data",{get(){console.log("读取data的操作被拦截了");return_data;},});console.log(obj.data);

但是如果你这么写,就会报错,栈溢出,因为递归调用了

2.使用proxy,可以定义空对象,里面不写属性值,他不会报栈溢出的原因也是因为没有递归调用,根本原因是因为拦截器返回的不是它本身,而是obj的属性值

constobj={};constp=newProxy(obj,{get(obj,prop){console.log(`${prop}的读取操作被拦截了`);returnobj[prop];},});console.log(p.data);console.log(p.name);


3.如果你这么写,同样会报栈溢出

5.如果想要实现和proxy类似功能,可以这样写

constobj={name:'syt',age:4};consthandler={get(target,prop){console.log(`${prop}的读取操作被拦截了`);returntarget[prop];// target是另一个对象},set(target,prop,value){console.log(`${prop}的设置操作被拦截了`);target[prop]=value;// target是另一个对象returntrue;}};// 手动实现类似Proxy的功能functioncreateProxy(target,handler){constproxy={};Object.keys(target).forEach(key=>{Object.defineProperty(proxy,key,{get(){returnhandler.get(target,key);// 这里不会递归},set(value){handler.set(target,key,value);}});});returnproxy;}constp=createProxy(obj,handler);console.log(p.name)p.age=18


6.但是,这种写法,也是必须的在obj中写上所有的key,才可以拦截到,如果你不写的话就拦截不到

7.如果使用proxy的话,就可以不用定义key,写一个空的对象就可以


当然这两个只是拿get和set来做对比,简单记录下

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/23 0:42:25

动态删除表外键依赖

这是一个用于 Liquibase 的 SQL 脚本,它的核心功能是动态查找并删除指向某个特定表字段的所有外键约束。它通常用在数据库重构中,当你需要删除一个有外键引用的表或字段时,必须先解除这些依赖。 下面我将对脚本进行逐行详解,并举例…

作者头像 李华
网站建设 2026/5/25 6:20:20

openFuyao 容器平台快速入门:Nginx 应用部署全流程实操

这里写目录标题一、引言“核心扩展”轻量化设计,从基础编排到异构算力调度可插拔架构:自由定义您的容器平台二、环境准备与安装部署测试环境准备(一)前提条件确认(二)版本下载与安装脚本获取(三…

作者头像 李华
网站建设 2026/5/25 16:17:43

警惕Vibe Coding ,Agentic Coding认知升级与实践避坑指南

首先需要说明的一点是,我本身不认为自己是 AI 编程的资深专家,所谓的实践完全是基于自己使用了多款 AI 编程产品的切身感受,以及跟 Qoder 研发同学、其他互联网公司 AI IDE 研发同学的交流,如果分享中的观点或者认知有跟你违背的地…

作者头像 李华
网站建设 2026/5/14 3:16:20

Qoder 实战:AI 驱动的研发效率与质量提升

大家好,我是迎天下网络科技有限公司的技术负责人李芳。作为一名一线的 Java 后端开发工程师,今天想和大家分享一下我在实际项目中使用 Qoder 的一些经验。通过几个真实的小案例,我会展示 Qoder 是如何帮助我们提升开发效率、优化代码质量的。…

作者头像 李华
网站建设 2026/5/25 21:17:41

国产期刊被EI收录!首个影响因子12分,录用率67%,国人友好~

Carbon Neutralization《碳中和》近日正式被国际权威数据库EI Compendex收录。该刊2022年创刊,每年出版6期,由温州大学与Wiley联合出版,集高影响因子、高录用率、对国人友好、出版速度快等优势于一身,具有高起点、高包容性和高亲和…

作者头像 李华