代理

106 阅读1分钟

前言

ES6新增的代理和为开发者提供了拦截并向基本操作嵌入额外行为的能力。通过一个简单的例子,女明星Max和经纪人James演示代理。

基础

代理是目标对象的抽象,目标对象既可以直接被操作,也可以通过代理来操作,类比经纪人与明星,商务合作可以直接与明星沟通,也可以通过经纪人与明星沟通,两个人是利益共同体。

如何创建代理

代理是通过Proxy构造函数创建的,接收两个参数:目标对象和处理程序对象,两个都是必填。

创建一个空代理

接着上面的例子,现在有个代言需要跟Max谈,我们先创建一个女明星Max

const star = {
  name: 'Max',
  age: '18',
}

再创建一个活动计划,以后需要Max做的事情,都记录在这里

const handle = {}

将经纪人和明星捆绑在一起,同步一下信息,创建代理关系,经纪人登场

const james = new Proxy(star,handle);

现在james全权代理女明星max

// 通过james可获取max信息
console.log(star.name); // 'Max'
console.log(james.name); // 'Max'
// 给james的福利 max可同步
james.salary = 80000
console.log(star.salary); // 80000

Tip:

1.Porxy.prototype是undefined 不能使用instanceof

james instanceof Proxy  // TypeError

2.代理和目标不严格相等

james === max; //false