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
// setting count!
++obj.count
// getting count!
// setting count!
// 2
上面的代码创建了一个基础的proxy,并且指定了get和set方法,当更改obj的值时,会触发set方法。
使用自增表达式为其赋值时,会先触发get事件,也就是先拿到obj的值,然后再为其+1