apply(target, ctx, args): 用于拦截函数的调用\ call 和 reply 操作. target 表示目标对象, ctx 表示目标对象上下文, args 表示目标对象的参数数组.
测试代码:
function sub(a, b) {
return a-b;
}
let handler = {
apply: function(target, ctx, args){
console.log('handle apply');
console.log(...arguments);
var result = Reflect.apply(...arguments);
console.log(result);
return result;
}
}
let proxy = new Proxy(sub, handler)
proxy(2,1)
执行结果:
handle apply
[Function: sub] undefined [ 2, 1 ]
1
Proxy 用于修改某些操作的默认行为, 等同于在语言层面做出修改,所以属于一种"元编程",即对编程语言进行编程.
Proxy 可以理解成,在目标对象之前假设一层"拦截", 外界对该对象的访问,都必须通过这层拦截,因此提供一种机制,可以对外界的访问进行过滤和改写.
参考: