Proxy可以修改对象的默认行为,例如,如果为某个对象设置了包含有get方法的Proxy对象,那么当访问对象的值的时候,要首先经过这个get方法。这样,开发者获得了对象代理的权限和方式;他人对于对象的访问,将是受到开发者的限制和控制的。
栗子:
var proxyObj = new Proxy({}, { get: function (target, key, receiver) { console.log(`getting the prop ${key}!`); return 18; }, set: function (target, key, value, receiver) { console.log(`setting the prop ${key}!`); return Reflect.set(target, key, value, receiver); } });上面这个代码为一个空对象设定了一个代理,重新定义了属性的get(读取)和set(设置)行为。
这样如果我们运行下面这段代码,得到的结果就会是:
proxyObj.age // getting age! // 18总结一下上面的栗子,Proxy的基本语法是:
var proxy = new Proxy(target, handler);其中target表示需要要代理方法的目标对象,handler用来定义需要代理的方法(例如上面栗子中的get和set方法)。
另外一个需要注意的就是,如果需要使用代理方法,必须对new Proxy返回的proxyObj进行操作,而不是对Proxy的参数target进行操作。
Proxy可以代理的方法有很多,如下所示:
1.get 2.set 3.has 4.deleteProperty 5.ownKeys 6.getOwnPropertyDescriptor 7.defineProperty 8.preventExtensions 9.getPrototypeOf 10.isExtensible 11.setPrototypeOf 12.apply 13.construct关于这些方法的具体使用方法,可参见阮一峰大神博客。 Proxy代理方法精讲