概述
Proxy
用于修改某些操作的默认行为。
Proxy
可以理解成,在目标对象之前架设一层“拦截”,外界对该对象的访问,都必须先通过这层拦截,因此提供了一种机制,可以对外界的访问进行过滤和改写。Proxy
这个词的原意是代理,用在这里表示由它来“代理”某些操作,可以译为“代理器”。
1 | var obj = new Proxy({}, { |
上面代码对一个空对象架设了一层拦截,重定义了属性的读取(get
)和设置(set
)行为。1
2
3
4
5
6
7obj.count = 1
// setting count!
obj.count += 1
// getting count!
// setting count!
// 2
ES6 原生提供 Proxy
构造函数,用来生成 Proxy
实例。1
2
3
4
5
6
7var proxy = new Proxy(target, handler);
/**
* new Proxy()表示生成一个Proxy实例
* harget参数表示所要拦截的目标对象
* handler参数也是一个对象,用来定制拦截行为。
*/
当然,我们也可以拦截读取属性:1
2
3
4
5
6
7
8
9var proxy = new Proxy({}, {
get: function(target, propKey) {
return 35;
}
});
proxy.time // 35
proxy.name // 35
proxy.title // 35
拦截元素返回35,所以无法访问哪个属性,都返回35。
Vue3.0 里面的监听器(Observer)由 Object.defineProperty
改用 Proxy
,解决了增加或删除属性、修改数组某一项值的双向绑定问题。