news 2026/6/7 15:52:39

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/6/6 5:05:21

Matlab在多类结构动力学模拟中的精彩应用

基于matlab的多类结构动力学,凸轮机构、双凸轮、弦振动模拟、阻尼振动 、四连杆机构 、套杆运动 、三根弹簧作用的振子。 程序已调通,可直接运行。最近在Matlab里玩了不少有趣的结构动力学模拟,感觉像是打开了一个神奇的物理世界大门&#x1…

作者头像 李华
网站建设 2026/6/6 16:41:59

解决方案:全球化时代下的海外版外卖系统

在全球数字经济浪潮的推动下,外卖行业正经历前所未有的全球化扩张。从东南亚的GrabFood到欧洲的Deliveroo,从北美的DoorDash到中东的Talabat,海外外卖市场呈现出多元化、本地化、智能化的发展趋势。然而,与成熟的国内市场相比&…

作者头像 李华
网站建设 2026/6/5 5:53:55

AI伦理治理:在创新与规范之间寻找动态平衡

随着人工智能深度融入生产生活各领域,技术带来效率革命的同时,也衍生出数据滥用、算法偏见、责任模糊等突出伦理风险。党的二十届四中全会明确提出加强人工智能治理,构建科学完备的伦理框架已成为推动AI向善发展的核心命题。2025年&#xff0…

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

基于stm32和zigbee地下停车场智能照明系统设计(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T4332310M设计简介:本设计是基于stm32和zigbee地下停车场智能照明系统设计,主要实现以下功能:从机通过光敏电阻检测光照…

作者头像 李华
网站建设 2026/6/5 0:21:42

超细整理,性能测试如何做?怎么做?常见面试题(汇总五)

目录:导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结(尾部小惊喜) 前言 1、混合业务场景的…

作者头像 李华