ES6 proxy
基本概念
ECMAScript标准委员会定义了一个由14种内部方法组成的集合,亦即一个适用于所有对象的通用接口。而proxy的存在即是为了覆写这些内部方法。
代理方式:
var target={}.handle={}; var proxy=new Proxy(target,handle);
注意:
(1)用Proxy代理的对象调用方法中的this指向Proxy
(2)Proxy.revocable方法能够取消代理,该方法返回的对象包含一个.proxy
属性和一个.revoke
方法。调用revoke方法能够取消.proxy指向的Proxy实例
let {proxy,revoke}=Proxy.revocable(target,handler);
API
->MDN Proxy(同样定义了14中方法,与14种内部方法一一对应)
API中的注意事项
get(target, propKey, receiver) | set(target, propKey, value, receiver)
receiver 是我们首先开始搜索这个属性的对象。有时我们必须要搜索几个对象,obj可能是一个在receiver原型链上的对象。
has(target, propKey)
has
方法拦截的是HasProperty
操作,而不是HasOwnProperty
操作,虽然for...in
循环也用到了in
运算符,但是has
拦截对for...in
循环不生效。ownKeys方法拦截for...in循环。
construct(target, args)
newTarget指向创造实例对象时,new
命令作用的构造函数