js--proxy

proxy

我们在设置代理的时候我们会经常用到这个方法,那么它究竟是一个怎么样的方法呢?

var obj = new Proxy(
      {},
      {
        get: function(target, propKey, receiver) {
          console.log(`getting ${propKey}!`);
          return Reflect.get(target, propKey, receiver);
        },
        set: function(target, propKey, value, receiver) {
          console.log(`setting ${propKey}!`);
          return Reflect.set(target, propKey, value, receiver);
        },
      }
    );
    obj.count = 1;
    ++obj.count;
    obj.count;

通过打印我只得到了setting,getting,setting也就是说再这分别是两次设置,即把它拿到的属性覆盖在返回
而在阮一峰的es6里面对其的解释是

Proxy 用于修改某些操作的默认行为,等同于在语言层面做出修改,所以属于一种“元编程”(meta programming),即对编程语言进行编程

那么我们对get和set的属性都进行打印

var obj = new Proxy(
      {},
      {
        get: function(target, propKey, receiver) {
          console.log(`getting ${propKey}!`, target, propKey, receiver);
          return Reflect.get(target, propKey, receiver);
        },
        set: function(target, propKey, value, receiver) {
          console.log(`setting ${propKey}!`,  target, propKey, receiver);
          return Reflect.set(target, propKey, value, receiver);
        },
      }
    );
    obj.count = 1;
    ++obj.count;
    obj.count;  //这里是我踩的一个坑只有前面两个会发现有两个settting但是只有一个getting导致只出现一个count:1

控制台结果在这里插入图片描述
这里get的属性是 依次为目标对象、属性名和 proxy 实例本身 set的属性是依次为目标对象、属性名、属性值和 Proxy 实例本身 在Proxy里面还有很多方法例如

get(target, propKey, receiver):拦截对象属性的读取,比如proxy.foo和proxy[‘foo’]。
set(target, propKey, value, receiver):拦截对象属性的设置,比如proxy.foo = v或proxy[‘foo’] = v,返回一个布尔值。
has(target, propKey):拦截propKey in proxy的操作,返回一个布尔值。
deleteProperty(target, propKey):拦截delete proxy[propKey]的操作,返回一个布尔值。
ownKeys(target):拦截Object.getOwnPropertyNames(proxy)、Object.getOwnPropertySymbols(proxy)、Object.keys(proxy)、for…in循环,返回一个数组。该方法返回目标对象所有自身的属性的属性名,而Object.keys()的返回结果仅包括目标对象自身的可遍历属性。
getOwnPropertyDescriptor(target, propKey):拦截Object.getOwnPropertyDescriptor(proxy, propKey),返回属性的描述对象。
defineProperty(target, propKey, propDesc):拦截Object.defineProperty(proxy, propKey, propDesc)、Object.defineProperties(proxy, propDescs),返回一个布尔值。
preventExtensions(target):拦截Object.preventExtensions(proxy),返回一个布尔值。
getPrototypeOf(target):拦截Object.getPrototypeOf(proxy),返回一个对象。
isExtensible(target):拦截Object.isExtensible(proxy),返回一个布尔值。
setPrototypeOf(target, proto):拦截Object.setPrototypeOf(proxy, proto),返回一个布尔值。如果目标对象是函数,那么还有两种额外操作可以拦截。
apply(target, object, args):拦截 Proxy 实例作为函数调用的操作,比如proxy(…args)、proxy.call(object, …args)、proxy.apply(…)。
construct(target, args):拦截 Proxy 实例作为构造函数调用的操作,比如new proxy(…args)。

常用的是get和set
通过以上我们发现Proxy是对传进来的目标值进行拦截,然后再加工的一个属性和工厂模式很类似
通过这些我们可以实现一个链式调用,实现一个自身加6然后乘上加过后的自己再反转代码如下

 var p = function(value) {
      var result = [];
      var start = new Proxy(
        {},
        {
          get: function(pObject, fnName) {
            if (fnName === "get") {
              return result.reduce((val, fn) => {
                return fn(val);
              }, value);
            }
            result.push(window[fnName]);
            return start;
          },
        }
      );
      return start;
    };
    var double = n => n * 6;
    var pow = n => n * n;
    var reverseInt = n =>
      n
        .toString()
        .split("")
        .reverse()
        .join("") | 0;
    let a = p(4).double.pow.reverseInt.get;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
nginx-proxy-manager 是一个基于 Web 界面的 Nginx 反向代理管理工具,可以帮助用户轻松地设置和管理多个网站的反向代理。它基于 Node.js 和 Nginx,可以在 Linux、macOS 和 Windows 等操作系统上运行。 以下是在 Linux 系统上安装 nginx-proxy-manager 的步骤: 1. 安装 Docker 和 Docker Compose nginx-proxy-manager 是基于 Docker 容器技术实现的,因此需要先安装 Docker 和 Docker Compose。 2. 下载 nginx-proxy-manager 在任意文件夹中执行以下命令,下载最新版本的 nginx-proxy-manager: ``` git clone https://github.com/nginx-proxy-manager/nginx-proxy-manager.git ``` 3. 配置 nginx-proxy-manager 进入 nginx-proxy-manager 目录,执行以下命令,生成配置文件: ``` cp app/config.sample.json app/config.json ``` 编辑配置文件,根据需要修改以下配置项: - `db.host`:MySQL 数据库的主机地址,默认为 `127.0.0.1`。 - `db.name`:MySQL 数据库的名称,默认为 `npm`. - `db.user`:MySQL 数据库的用户名,默认为 `npm`. - `db.password`:MySQL 数据库的密码,默认为空。 - `email.from`:邮箱发送邮件的地址,默认为 `noreply@example.com`。 - `email.transport`:发送邮件的方式,默认为 `smtp`。 - `email.smtp`:SMTP 服务器的配置信息。 4. 启动 nginx-proxy-manager 执行以下命令启动 nginx-proxy-manager: ``` docker-compose up -d ``` 这会启动三个 Docker 容器:nginx-proxy-manager、MySQL 数据库和 Let's Encrypt 容器。在容器启动后,可以通过浏览器访问 `http://localhost:81` 进入 nginx-proxy-manager 的 Web 界面。 5. 配置 nginx-proxy-manager 首次进入 nginx-proxy-manager 的 Web 界面后,需要先设置管理员账号和邮箱,然后就可以开始配置反向代理和 SSL 证书了。 以上就是在 Linux 系统上安装 nginx-proxy-manager 的步骤,其他操作系统的安装方法类似。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值