JavaScript proxy 示例

JS逆向实战:如何用Proxy代理快速定位补环境缺失属性(附完整代码示例) 本文详细介绍了如何利用JS逆向技术中的Proxy代理快速定位和补全浏览器环境缺失属性,解决反爬机制中的环境检测问题。通过完整的代码示例,展示了从基础代理实现到高级功能扩展的全过程,包括对抗浏览器指纹检测的实战案例,帮助开发者高效应对复杂的JS逆向工程挑战。 阅读详情

当你使用 JavaScript 中的 Proxy 对象时,你可以拦截并自定义目标对象的行为。下面是一个简单的示例,展示了如何使用 Proxy 来监听对象属性的读取和设置操作:

// 目标对象
const target = {
  name: "Alice",
  age: 30
};

// 创建一个 Proxy 对象
const handler = {
  get: function(target, prop) {
    console.log(`读取属性 ${prop}`);
    return target[prop];
  },
  set: function(target, prop, value) {
    console.log(`设置属性 ${prop} 为 ${value}`);
    target[prop] = value;
  }
};

const proxy = new Proxy(target, handler);

// 通过 Proxy 对象访问属性
console.log(proxy.name); // 会触发 get 拦截器

proxy.age = 31; // 会触发 set 拦截器

在上面的示例中,handler 对象包含了两个拦截器:get 和 set。当我们通过 proxy 对象访问属性时,get 拦截器会被触发,而当我们设置属性时,set 拦截器会被触发。通过拦截器,我们可以在操作发生时执行自定义的行为,例如在控制台输出日志。

请注意,这只是 Proxy 的基本示例。Proxy 还支持更多的拦截器,比如 deleteProperty、has、apply 等,可以实现更丰富的功能。了解这些拦截器可以让你更好地理解和使用 Proxy。


当使用 Proxy 对象时,你可以使用多种拦截器来捕获不同的操作。以下是一些常见的拦截器示例:

// 目标对象
const target = {
  name: "Alice",
  age: 30
};

// 创建一个 Proxy 对象
const handler = {
  get: function(target, prop) {
    if (prop === "age") {
      return `年龄:${target[prop]}`;
    }
    return target[prop];
  },
  set: function(target, prop, value) {
    if (prop === "age" && typeof value !== "number") {
      throw new Error("年龄必须是数字");
    }
    target[prop] = value;
  },
  deleteProperty: function(target, prop) {
    console.log(`删除属性 ${prop}`);
    delete target[prop];
  }
};

const proxy = new Proxy(target, handler);

// 通过 Proxy 对象访问属性
console.log(proxy.name); // 输出: Alice
console.log(proxy.age);  // 输出: 年龄:30

// 设置属性(会触发 set 拦截器)
proxy.age = 31;

// 尝试设置非数字的年龄(会触发 set 拦截器抛出错误)
try {
  proxy.age = "thirty";
} catch (error) {
  console.error(error.message); // 输出: 年龄必须是数字
}

// 删除属性(会触发 deleteProperty 拦截器)
delete proxy.name;

在上述示例中,我们展示了如何使用 get 拦截器来处理属性的读取操作,如何使用 set 拦截器来处理属性的设置操作,并在设置非数字年龄时抛出错误。此外,我们还使用了 deleteProperty 拦截器来处理属性的删除操作。

Proxy 的强大之处在于,你可以根据需要实现各种自定义行为,从而更好地控制和管理对象的操作。


当使用 Proxy 对象时,除了 get、set、deleteProperty 拦截器外,还有一些其他有用的拦截器,比如 has 和 apply。以下是这两个拦截器的示例:

// 目标对象
const target = {
  name: "Alice",
  age: 30
};

// 创建一个 Proxy 对象
const handler = {
  has: function(target, prop) {
    console.log(`检查属性 ${prop} 是否存在`);
    return prop in target;
  },
  apply: function(target, thisArg, args) {
    console.log(`调用函数,参数为 ${args}`);
    return target(...args);
  }
};

const proxy = new Proxy(target, handler);

// 检查属性是否存在(会触发 has 拦截器)
console.log("name" in proxy); // 输出: 检查属性 name 是否存在

// 调用函数(会触发 apply 拦截器)
const result = proxy.sayHello("Hello, Proxy!"); // 输出: 调用函数,参数为 Hello, Proxy!
console.log(result); // 输出: Hello, Proxy!

在上面的示例中,我们使用了 has 拦截器来捕获属性是否存在的检查操作。当我们使用 in 操作符检查属性是否存在时,has 拦截器会被触发。

另外,我们还使用了 apply 拦截器来捕获函数的调用操作。当我们调用 proxy 对象上的函数时,apply 拦截器会被触发,并显示传递的参数。

通过理解和使用这些不同类型的拦截器,你可以更好地控制和定制 Proxy 对象的行为,以适应各种场景和需求。

Linux命令行入门:从零掌握服务器运维与Shell脚本基础 在信息化时代,操作系统是数字世界的基石,而终端命令行则是高效驾驭服务器的核心技能。无论是软件部署、服务监控还是故障排查,掌握基于Shell的指令操作都能大幅提升工程效率。从最基础的文件目录管理、文本处理,到权限控制、进程监控与网络调试,命令行提供了一套强大且可自动化的操作范式。尤其对于运维工程师和开发者而言,理解管道、重定向以及脚本化任务,意味着将重复劳动转化为可复用的自动化流程。本文从环境准备讲起,系统梳理常用Linux命令的实际场景与输出验证,并延伸至Shell脚本编写与定时任务,帮助初学者快速建立从操 阅读详情

相关推荐

LightGBM参数调优实战:从基础到高级技巧

本文深入探讨了LightGBM参数调优的实战技巧。文章从理解其Leaf-wise生长策略的核心逻辑出发,系统性地介绍了分层调参策略:首先调整控制模型结构的参数(如num_leaves),其次优化学习能力参数(如learning_rate),最后通过正则化与随机化参数提升泛化能力。文中还提供了从建立基线到最终微调的完整实战流程与高级避坑指南,帮助读者高效提升模型性能。

i8j9k0l1的博客 260

4 个实用示例帮助你掌握 JavaScript 中Proxy功能

英文 | https://javascript.plainenglish.io/why-proxies-in-javascript-are-fantastic-db100ddc10a0翻译 | 杨小爱什么是Proxy?它究竟是做什么的?在解释这一点之前,让我们看一个真实世界的开发例子。我们每个人在日常生活中都有很多事情要做,比如看邮件、收快递等等。有时我们可能会感到有点焦...

web前端开发 336

PySpark 本地开发环境搭建与实践

本文详细介绍了 PySpark 本地开发环境的搭建过程,包括 JDK、Hadoop、Anaconda、PySpark 的安装以及 Pycharm 工程的创建。同时,深入讲解了代码编写、本地开发案例(如 WordCount、处理特殊分隔符、读取 hdfs 数据、获取外部变量)、Spark 程序的监控和 local 模式下结果文件数量问题等内容。通过掌握这些知识和技能,读者可以在 Windows 本地环境中高效地进行 PySpark 开发,处理大规模数据,解决实际业务中的数据分析和处理问题。

天冬忘忧的博客 3011

知识笔记 - Proxy代理函数在JS逆向补环境中的妙用

文章旨在学习和记录,若有侵权,请联系删除 文章目录前言一、Proxy是什么二、Proxy基础用法三、Proxy在补环境中的使用总结 前言 上篇文章我们简单介绍了下JavaScript中的Proxy代理函数用法,并通过该函数让 pdd 的 anti_content 加密算法进行环境自吐,实现了anti_content 参数值的本地代码生成 (点击下面链接跳转至文章),接下来我们详细介绍下Proxy函数。 JS逆向 - pdd的anti_content参数分析 一、Proxy是什么 Proxy 可以.

m0_51159233的博客 1万+

S32K144 LPI2C Master/Slave模式配置与多设备通信实战

本文详细介绍了NXP S32K144微控制器中LPI2C模块的主从模式配置与多设备通信实战。内容涵盖硬件连接、引脚配置、主从模式深度设置、中断/DMA应用,并通过AT24C16 EEPROM、SHT30传感器等实例,解析了多设备通信中的地址切换、时序控制及常见问题排查技巧,帮助开发者高效实现基于LPI2C的稳定通信。

weixin_29158047的博客 269

告别乱码!ESP32+LVGL显示中文的保姆级教程(基于ESP-IDF,附7000字库生成)

本文详细介绍了如何在ESP32上使用LVGL显示中文的完整解决方案,包括中文字库生成、ESP-IDF工程集成和优化技巧。通过7000字库生成和实战案例,帮助开发者彻底解决中文乱码问题,适用于智能家居、智能手表等嵌入式设备开发。

weixin_28740299的博客 396

如何在Ruby中调用JavaScript:Bowline Proxy API完整指南(附示例)

Bowline 是一个面向桌面端的 Ruby/HTML/JS GUI 绑定框架,让你用 Web 技术写界面、用 Ruby 写逻辑。本文聚焦 Bowline Proxy API 的完整用法:如何从 Ruby 侧调用 JavaScript(`call`/`res`/赋值三大模式)、如何在 Binder 中使用代理快捷方式,以及 JavaScript 如何反向调用 Ruby 方法,全部配可直接运行的示例

gitblog_00596的博客 501

ESP-SPARKBOT AI 智能机器人:v1.2 全流程复刻指南

本文介绍 ESP-SPARKBOT AI 智能机器人 v1.2 版本的全流程复刻,包含 PCB 、3D 打印、固件烧录、常见问题解决、参考资料等

举世誉之而不加劝,举世非之而不加沮,定乎内外之分,辩乎荣辱之境,斯已矣。 9245

Proxy和Reflect,打造灵活的JS代理机制 (代码示例)

通过使用Proxy,我们可以轻松地实现对象的代理和拦截操作。而Reflect的引入为与Proxy的配合提供了统一和规范的方式来操作对象。我们可以实现“数据绑定和观察者模式”,用来实现数据的双向绑定,通过拦截对象属性的读取和设置操作,可以自动通知变更。同时,也可以用来“验证和数据校验”,如校验form表单等。以及扩展对象功能和方法劫持,添加自定义功能或修改现有功能。还有很多。。。

SailingCoder的博客 878

自定义载板RK3588HDMI输入配置完整解决方案

✅ HDMI输入信号检测✅ 自动时序识别(支持1080p@60Hz等标准格式)✅ V4L2视频设备接口✅ 实时视频流捕获✅ H.264编码录制✅ HDCP内容保护支持问题根因识别:发现了hdmim1模块资源冲突的本质问题硬件设计理解:明确了Orange Pi 5 Plus的真实硬件设计意图功能实现:成功启用HDMI输入功能,替代了无法使用的HDMI1输出完整验证:建立了从硬件检测到视频录制的完整测试流程。

梁俊星的博客 1271

[STC32G144K246入门第六步]DAC驱动

本文摘要介绍了STC32G144微控制器内置的12位DAC模块特性与应用。该芯片集成双通道独立DAC,需通过内部运放缓冲后从P0.7/P5.0引脚输出,支持音频处理、波形生成等应用场景。重点阐述了DAC的R-2R梯形网络工作原理、关键性能指标(12位分辨率、转换速度等)及编程配置方法,包括频率设置、寄存器操作和运放引脚配置。文中还提供了32点正弦波表示例和初始化代码,强调参考电压稳定性对输出精度的重要影响。

sinat_58149788的博客 139

js中使用Proxy代理实现数据双向绑定

js 中使用Proxy代理实现数据双向绑定 html代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-s.

我的个人博客 716

Allegro如何改变线宽操作指导

用Allegro做pcb设计的时候,改变走线线宽是非常常用的功能,如下图。线宽目前是12mil,需要把线宽改成15mil。如何改变线宽操作指导。

weixin_54787054的博客 4254

基于proxy-observe项目的常见问题解决方案

基于proxy-observe项目的常见问题解决方案 proxy-observe项目是一个使用JavaScript编写的代理观察模式实现,主要用于在网页应用中观察DOM变化。该项目可以帮助开发者在不直接修改DOM的情况下,对DOM元素进行观察,并对属性或子节点的变化进行响应。它使用了JavaScript ES6+的特性,以及一些现代前端技术栈。 新手指南 以下是新手在使用proxy-observe...

gitblog_00825的博客 338

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【JavaScript】对 Proxy 与 defineProperty 的理解和运用场景

Proxy和都为开发者提供了强大的数据劫持能力。在实际项目开发中,若只是简单劫持属性的读写操作,并且对兼容性要求较高,是不错的选择。要是需要更丰富的功能,如拦截多种类型操作,那么Proxy无疑更为合适。希望通过本文的介绍,能帮助大家深入理解这两种技术,并在开发中灵活运用。

qq_41590018的博客 1069

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

proxy对象实现数据双向绑定

proxy对象顾名思义是对象的代理,对目标对象进行封装成代理对象,以达到读取、修改、查询目标对象属性等操作时起到拦截作用,对目标对象的默认操作进行重新定义。下面看一个例子: let obj = {name: 'zhangsan', age: 20} let objHandler = { get: function(target,propKey){ return '您访问...

I_recluse的博客 877

你不知道的 Proxy

在 从观察者模式到响应式的设计原理 这篇文章中,阿宝哥介绍了 observer-util 这个库如何使用 Proxy 来实现响应式。而对于 vue-next 项目中的 @vue/react...

奇舞周刊 759

JS Proxy

JS Proxy Proxy是一个代理,当我们对某个数据值进行操作的时候,进行拦截处理,监听操作。let a = new Proxy(target, handler); 他有两个参数: 第一个传入的参数是我们要对其拦截的那个对象(这个对象可以是任何类型的对象,包括原生数组,函数,甚至另一个代理)。 第二个参数是一个对象,这个对象的属性是当执行一个操作时定义代理的行为的函数,(就是拦截的回调函数) 示例: let test = { 'name':'ni' } let a

weixin_45021098的博客 1198

Vue3.0学习笔记22:响应式原理proxy

【代码】Vue3.0学习笔记22:响应式原理proxy。

那人独钓寒江雪 453

proxy的深度拦截实现

let obj = { city: "北京", area: ['海淀区', '石景山区', '门头沟区'], children: { test1: { name: "鲁谷", area: ['sss', 'bbb'] } ...

weixin_40629549的博客 1550

【js逆向】hook大全

提供的各种方案分析js以外,其实js本身就是一个编程语言,我们可以根据编程语言的逻辑,进行各种hook来方便分析代码和逻辑(可以想象成C++、java等hook)。:不少库都是用了hook的概念,比较有名的网络请求库ajax、axios,其自身提供hook基址,是不错的参考。的课程,关于js逆向是很全面的了,大家可以在bilibili上看视频教程,也可以看其书籍《反爬虫AST原理与还原混淆实战》进行系统学习。js逆向依托于浏览器,技术点特别多,我们需要基于现有知识储备,不断探索新的方案,从而实现目标。

kinghzking的专栏 5369

为什么Proxy一定要配合Reflect使用?

本文特别福利,赠送JS新书,深入理解现代JavaScript,规则见文末~引言EcmaScript 2015 中引入了 Proxy 代理[1] 与 Reflect 反射[2] 两个新的内置模块。我们可以利用 Proxy 和 Reflect 来实现对于对象的代理劫持操作,类似于 Es 5 中 Object.defineProperty\(\)[3]的效果,不过 Reflec...

LuckyWinty的博客 771

用Proxy手写vue响应式

【代码】用Proxy手写vue响应式。

weixin_45403802的博客 100

Proxy在JavaScript中的简单用法

在JavaScript中使用代理(Proxy)主要是通过Proxy对象实现的,它允许你自定义基本操作的行为,如属性查找、赋值、枚举、函数调用等。Proxy对象可以用来拦截并重新定义对目标对象的基本操作。下面是关于如何在JavaScript中使用Proxy的一些介绍和示例。

2401_89454411的博客 1090

Proxy

由于Proxy是JavaScript引擎的一部分,我们无法直接查看其源码。不过,我可以为您详细解析Proxy的工作原理,并提供一个模拟实现,以帮助您理解其内部机制。

weixin_48357623的博客 789

JavaScript 3.8 proxy和reflect

一、

LetsStudy的博客 202
上一篇: Vue应用的性能优化技巧,包括懒加载、代码拆分、虚拟列表等示例
下一篇: vue3 响应式原理
.NET跨平台
博客等级 码龄15年 6066粉丝 738原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值