秋雨
首页
  • HTML
  • CSS
  • JavaScript
设计模式
webpack
  • 前端常识
  • ES
  • React
  • Redux
  • ReactRouter
  • 事件循环
  • 浏览器渲染流程
  • Vue项目性能优化
  • Vue
  • App
Github
首页
  • HTML
  • CSS
  • JavaScript
设计模式
webpack
  • 前端常识
  • ES
  • React
  • Redux
  • ReactRouter
  • 事件循环
  • 浏览器渲染流程
  • Vue项目性能优化
  • Vue
  • App
Github
  • 构造器模式
  • 原型链模式
  • 工厂模式
  • 抽象工厂模式
  • 建造者模式
  • 单例模式
  • 装饰器模式
  • 适配器模式
  • 适配器模式
  • 代理模式
  • 观察者模式
  • 发布订阅模式
  • 模块模式
  • 桥接模式
  • 组合模式
  • 命令模式
  • 命令模式
  • 迭代器模式
  • 职责链模式

简介

代理模式(Proxy) ,为其他对象提供一种代理以控制对这个对象的访问 代理模式使得代理对象控制具体对象的引用。代理几乎可以是任何对象:文件,资源,内存中的对象,或者是一些难以复制的东西

ES6

class Star {
  play() {
    console.log("演戏");
  }
}

class StarProxy {
  constructor() {
    this.superStart = new Star();
  }

  talk(price) {
    if (price >= 10000) {
      this.superStar.play();
    } else {
      throw new Error("价钱不合适");
    }
  }
}

let jr = new StarProxy();

jr.talk(100);

Proxy

var star = {
  name: "tiechui",
  workprice: 10000,
};
let proxy = new Proxy(star, {
  get(target, key) {
    if (key === "workprice") {
      console.log("访问了");
    }
    return target[key];
  },
  set(target, key, value) {
    if (key === "workprice") {
      console.log("设置了");
      if (value > 10000) {
        console.log("可以合作");
      } else {
        throw new Error("价钱不合适");
      }
    }
  },
});

示例

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>代理模式</title>
  </head>
  <body>
    <div id="box"></div>
    <script>
      let vueobj = {};

      let proxy = new Proxy(vueobj, {
        get(target, key) {
          return target[key];
        },
        set(target, key, value) {
          if (key === "data") {
            box.innerHTML = value;
          }
          target[key] = value;
        },
      });
    </script>
  </body>
</html>
最后更新:
贡献者: Mrlishizhen
Prev
适配器模式
Next
观察者模式