在访问数组前添加一层拦截,可以对访问操作进行统一的处理。类似拦截器的作用
数组代理
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]); // 4console.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); // 3proxy.apply(window, [1, 2]); // 6
