Proxy代理

2023-05-16

Proxy用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种’元编程’

语法:let proxy = new Proxy(target, handler)

  • target–所要拦截的目标对象
  • handler–通常以函数作为属性的对象,定制拦截行为

Proxy 支持的拦截操作一共有13种,比如getsethasownKeysdeleteProperty
在这里插入图片描述

handler.get() 在读取代理对象的某个属性时触发该操作,用于拦截某个属性的读取操作

new Proxy(target,{get(target,property,receiver)})接收三个参数

  • target–目标对象
  • propert–属性名
  • receiver–proxy实例本身
let data = { one:'one' , two:'two' }
let proxy = new Proxy(data,{
   get(target,property,receiver){
      console.log(target,property,receiver) // {one: "one", two: "two"} / two / Proxy{one: "one", two: "two"}
      return property+'A'
   }
})
console.log(proxy.two) // twoA

// ------------------------------------

let proxy = new Proxy({},{
   get(target,property,receiver){
      console.log(target,property,receiver) // {} / "test" / Proxy{}
      return '返回值'
   }
})
console.log(proxy.test) // 返回值

验证案例

let data = { name: "张三"};
let proxy = new Proxy(data, {
   get: function(target, propKey) {
      if (propKey in target) return target[propKey];
      else  throw new ReferenceError("Prop name \"" + propKey + "\" does not exist.");
   }
});
console.log(proxy.name) // 张三
console.log(proxy.age) // Prop name "age" does not exist
// 一旦对象被代理,this就会指向代理对象
let target = {
    get: function (){ console.log(this === proxy) }
 }
let handler = {}
let proxy = new Proxy(target,handler)
console.log(target.get(),proxy.get())// false true // target对象被代理,this指向代理对象
let base = {
   a:100,
   small:"hello world!!"
}
let proxy = new Proxy(base,{
   get(target, property,receiver){
      console.log(target, property,receiver)
      //属性转换成函数
      if("funName" === property ){
         return function(value){ console.log(value) }
      }
     if("ghost" === property ){ return "ghost创建属性" }
     //自定义语法糖
      if(property.includes("_")){
         const propertyBase = property.split("_")[0]
         console.log(propertyBase)
         const direct = property.split("_")[1]
         switch (direct){
            case "Big":
               return receiver[propertyBase].toLocaleUpperCase()
            default:
               break;
         }
      }
      if(!(property in target)){ //在target中查看是否有property这个key值,返回bools值
        throw new ReferenceError("Property \"" + property + "\" does not exist.");//验证属性值,如果没有则抛出错误
     }
     console.log('测试')
     return target[property]
   }
})
console.log(proxy.a)//输出100
proxy.funName('参数')// 属性转换为方法
console.log(proxy.ghost)//创建属性
console.log(proxy.small_Big)//输出 HELLO WORLD!!   自定义语法糖
console.log(proxy.a)//数据验证  抛出错误

待续。。。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Proxy代理 的相关文章

  • 为什么 nginx 接受 Host 标头与 server_name 不匹配的请求?

    我有一个这样设置的站点 nginx 作为代理服务器 通过 UNIX 套接字代理为 Django 站点提供服务的 Gunicorn 实例的请求 这是我的 nginx 配置 server listen 80 server name api my
  • 无法在代理后面使用量角器运行 Angular > 2 e2e

    将不胜感激任何帮助 我在windows上运行 我在全球安装了量角器版本5 3 0 在更新网络驱动程序之前我运行 webdriver manager clean 并更新版本如下 webdriver manager 更新 ie32 proxyh
  • 如何在 Nodejs 中创建代理下载

    我想创建一个nodejs服务器 它充当下载文件的代理 即用户点击 在下载按钮上 从nodejs服务器调用get nodejs服务器从不同的服务器获取链接 远程服务器并开始下载 以 TB 为单位 然后将该下载转发给用户 TB 文件不应存储在
  • 构建一个“简单”的 php url 代理

    我需要在我正在构建的 Web 应用程序中实现一个简单的 PHP 代理 它基于 Flash 并且目标服务提供商不允许编辑其 crossdomain xml 文件 任何 php 专家都可以就以下 2 个选项提供建议吗 另外 我认为 但不确定 我
  • 使用单个“proxyServer”将 Websocket 代理到多个目标

    我正在开发一个nodeJS websocket代理服务器 用例是当 websocket 请求到来时 我将检查其凭据 添加新标头 然后根据其组 来自用户 ID 将 websocket 连接重定向到其目标 webscoket 服务器 我发现大多
  • 添加对共享类的多个 WCF 服务的服务引用

    我正在尝试将我的 WCF Web 服务拆分为几个服务 而不是一个巨大的服务 但是 Visual Studio Silverlight 客户端 复制了两个服务共享的公共类 这是一个简单的例子来说明我的问题 在此示例中 有两个服务 两者都返回类
  • 如何通过 Ruby 中的代理获取带有用户代理和超时的 URL?

    如果我需要通过某些方式获取 URL 我该如何获取 URLproxy 它必须有一个timeout最大 n 秒 和一个用户代理 require nokogiri require net http require rexml document d
  • 通过 HTTPS 的隧道

    在我的工作场所 流量拦截器 防火墙变得越来越糟糕 我无法通过端口 22 连接到我的家用计算机 并且缺乏 ssh 访问权限让我感到难过 我以前可以通过将 SSH 移动到端口 5050 来使用它 但我认为最近的一些过滤器现在将此流量视为 IM
  • 如何在Java中通过反射调用代理(Spring AOP)上的方法?

    一个接口 public interface Manager Object read Long id 实现该接口的类 Transactional Public class ManagerImpl implements Manager Over
  • 使用 gmail smtp 通过代理发送电子邮件

    尝试在我的 C 应用程序中发送一些电子邮件 我位于代理后面 这无疑是代码无法工作的原因 这是我到目前为止所拥有的 应用程序配置
  • 使用 TCP 套接字在本地代理视频

    我一直对向媒体浏览器添加对视频播客的支持非常感兴趣 我希望用户能够浏览可用的视频播客并从互联网上流式传输它们 这真的很容易 因为媒体播放器等将愉快地播放存在于云中的文件 问题是我想在本地缓存这些文件 因此同一集的后续观看将不涉及流式传输 而
  • 如何配置 mod_proxy 以阻止除一个网站之外的所有网站

    我正在尝试设置 mod 代理来阻止除特定域之外的所有流量 我可以将其配置为使用 ProxyBlock 指令阻止各个域 并且可以使用 ProxyBlock 阻止所有内容 有没有一种方法可以阻止除一个域之外的所有域 Thanks Andrew
  • 如何使用.NET Core(FtpWebRequest)通过squid代理通过FTP获取文件?

    根据https learn microsoft com en us dotnet api system net ftpwebrequest proxy view netcore 3 1 https learn microsoft com e
  • Apache 和 Tomcat:ProxyPass 和 ProxyPassReverse

    我在配置 Apache 和 Tomcat 时遇到问题 情况如下 我有一个 Apache Web 服务器 正在正常运行和工作 我只需输入以下内容即可访问该服务器 http localhost 另外 在这个主机中 我有一个 Tomcat 正在运
  • 通过代理从java发送电子邮件

    我使用 Java Mail API 来发送和接收电子邮件 现在我做这个项目的地方有一个代理服务器 我可以知道如何通过代理服务器从java发送电子邮件吗 请参阅此处的常见问题解答 http www oracle com technetwork
  • PHP cURL 代理带标头?

    我正在制作一个 PHP 图像代理脚本 我需要它不仅能够回显其请求的图像的内容 而且还能够以相同的方式重现图像请求的标头 我见过一个 另一个 但没有同时看到过 这些 cURL 选项让我感到困惑 我该怎么做 抱歉 我不确定你想要什么 这是从图像
  • 如何使用 Boost 在 C++ 中制作代理服务器 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在制作一个 Web 应用程序模糊
  • 将虚拟主机分配给 Docker 端口

    我设置了通配符 DNS 以便对自定义域 foo 的所有 Web 请求都映射到 Docker 主机的 IP 地址 如果我有多个运行 Apache 或 Nginx 实例的容器 每个容器都会将 Apache 端口 80 映射到某个外部入站端口 我
  • 使用 NGINX auth_request 和 oauth2_proxy 设置标头

    我想使用授权请求 http nginx org en docs http ngx http auth request module html and oauth2 proxy https github com bitly oauth2 pr
  • 如何在 python 中使用 requests.post() 进行代理身份验证?

    from bs4 import BeautifulSoup import requests from requests auth import HTTPProxyAuth url http www transtats bts gov Dat

随机推荐

  • Aop小案例

    AOP小案例 AOP Aspect Oriented Programming 面向切面编程 00P Object Oriented Programming 面向对象编程 xff0c 用对象化的思想来完成程序 AOP是对0OP的一个补充 xf
  • 详细介绍在ubuntu20.04如何安装ROS系统,附常见错误的解决办法

    为保证在安装的过程中配置无误 xff0c 建议先打开软件与更新的界面 xff0c 检查框出的选项是否打上了 检查完成后 xff0c 就可以开始安装啦 xff01 1 添加ROS软件源 将以下两个命令任意选择一个复制到ubuntu的终端执行
  • ROS1学习笔记:创建工作环境与功能包(ubuntu20.04)

    参考B站古月居ROS入门21讲 xff1a 创建工作环境与功能包 基于VMware Ubuntu 20 04 Noetic版本的环境 文章目录 一 工作空间介绍二 创建工作空间2 1 创建工作空间2 2 编译空代码的工作空间2 3 设置和检
  • SQL注入

    常用函数 SQL注入步骤 联合查询注入 函数与报错注入 SQL盲注 宽字节注入 sqlmap工具 常用函数 常用系统函数 基础信息函数功能system user 系统用户名user 用户名current user 当前用户名session
  • 信息收集*

    域名信息收集 DNS记录查询 whois查询 备案信息查询 子域名信息收集 常用工具 查询网站 网络信息收集 c段查询 nmap扫描 获取真实IP 敏感信息收集 目录后台扫描 指纹信息识别 系统指纹识别 中间件指纹识别 Web程序指纹识别
  • 将kali linux 的语言切换为中文

    重置root密码 导入kali后 xff0c 一般没有root密码 xff0c 需要重置root密码的 使用sudo passwd root 命令重置密码 换源 因为默认源下载东西特别慢 xff0c 所以我们需要换源 输入vim etc a
  • curl命令

    在Linux中curl是一个利用URL规则在命令行下工作的文件传输工具 xff0c 可以说是一款很强大的http命令行工具 它支持文件的上传和下载 xff0c 是综合传输工具 xff0c 但按传统 xff0c 习惯称url为下载工具 htt
  • Docker基本命令

    一 安装docker 1 docker运行时需要到管理员用户权限 现在我们是普通用户 xff0c 终端内输入命令 su root切换为root用户 使用apt get update 更新软件源中的所有软件列表 2 使用apt install
  • Nmap常用命令

    nmap hostname ip 或者多个 ip 或者子网 192 168 123 iL ip txt 扫描 ip txt 的所有 ip A 包含了 sV xff0c O xff0c 探测操作系统信息和路由跟踪 一般不用 xff0c 是激烈
  • Jmeter性能测试(6)--元件的作用域与执行顺序

    jmeter xff08 六 xff09 元件的作用域与执行顺序 jmeter是一个开源的性能测试工具 xff0c 它可以通过鼠标拖拽来随意改变元件之间的顺序以及元件的父子关系 xff0c 那么随着它们的顺序和所在的域不同 xff0c 它们
  • sql,逻辑漏洞,xss,反序列化思维导图

  • Arduino MAX30102脉搏心率传感器使用教程

    最近闲来无事 xff0c 得到了一块MAX30102 xff0c 手头刚好有多余的Arduino控制板 xff0c 就跑了个官方的案例 xff0c 发现测出来的脉搏和心率还是挺准的 xff0c 三星手机用过这个系列的芯片 xff0c 但是有
  • 两种方法用IDEA创建一个Servlet程序 新手教程详解

    1 Servlet 是什么 xff1f Java Servlet 是运行在 Web 服务器或应用服务器上的程序 xff0c 它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层 2
  • reduce()累计器理解与使用实例

    关于reduce reduce 语法 xff1a arr reduce callback accumulator currentValue index array initialValue arr reduce accumulator cu
  • {}与Object.create(null)

    var one 61 创建的对象带有 proto 下面有一些方法与属性 xff0c 这便是js的原型链继承 xff0c 继承了object的方法和属性 xff1b 故在遍历对象时 xff0c 会遍历原型链上的属性 xff0c 带来性能上的损
  • uni-app 全局变量机制

    getApp globalData 全局变量机制 在App vue中 export default globalData text 39 text 39 在App vue中调用 this globalData text在onLaunch生命
  • vue3动态注册路由

    在vue cil2中 xff0c 我们可以通过webpack中require context这个api实现工程自动化 xff0c 而在vue cil3里vite替代了webpack xff0c 节省了webpack冗长的打包时间的同时我们也
  • try{}catch(res){}、throw(exception)、new Error()

    1 try catch res try 中的代码出现错误异常时 xff0c 系统会将异常信息封装到error对象中 xff0c 传递给catch res xff0c 包含res message res name等 EvalError eva
  • new Map()

    1 new Map let data 61 new Map data set key value 添加一个新建元素到映射 Map 1 key 61 gt value data get key 返回映射中的指定元素 data has key
  • Proxy代理

    Proxy用于修改某些操作的默认行为 xff0c 等同于在语言层面做出修改 xff0c 所以属于一种 元编程 语法 xff1a let proxy 61 new Proxy target handler target 所要拦截的目标对象ha