在访问数组前添加一层拦截,可以对访问操作进行统一的处理。类似拦截器的作用
数组代理
new Proxy(target, hander)
**params**
{ object } target 使用 Proxy 代理的目标对象**params**
{ object } hander 定义代理行为的对象**return**
{ object } 代理对象实例
var arr = [1, 2, 3, 4, 5];
var proxy = new Proxy(arr, {
get(array, key) {
return array[key] * 2;
},
set(array, key, value) {
array[key] = value;
}
});
proxy[5] = 100;
console.log(proxy[1]); // 4
console.log(arr); // [1, 2, 3, 4, 5, 100]
函数代理
new Proxy(target, hander)
**
**params**
{ object } target 使用 Proxy 代理的目标对象**params**
{ object } hander 定义代理行为的对象**return**
{ object } 代理对象实例
function add(a, b) {
console.log(a + b);
}
const proxy = new Proxy(add, {
apply(fn, ctx, args) {
for (let key in args) {
args[key] = args[key] * 2;
}
fn.apply(ctx, args);
}
})
add(1, 2); // 3
proxy.apply(window, [1, 2]); // 6