0
点赞
收藏
分享

微信扫一扫

apply()拦截proxy


对apply运用的理解

根据看到的案例得出的结论,当使用apply拦截的时候,target应该是一个函数,而且生成的proxy实例应该以函数的方式调用

let mark = {name: 'kf', book: 'vue'}
let target = {a: 'a', b:'b'}; // 因为不是函数,会导致报错
let hander = {
apply(target,ctx,args) {
console.log(target,ctx,args)
return 'I am the proxy'
}
}
let p = new Proxy(target,hander)
console.log(p(age=8,sex='男'))
console.log(p.call(mark,age=8,sex='男'))
console.log(p.apply(mark,[age=8,sex='男']))

报错:Uncaught TypeError: p is not a function

参数说明

// apply方法拦截函数的调用、call和apply操作。
// apply方法可以接受三个参数,分别是目标对象、目标对象的上下文对象(this)和目标对象的参数数组。
let handler = {
apply (target,ctx,args) {
return Reflect.applay(...arguments)
}
}

demo1:

let target = function(name="kate") {return 'I am the target' };
let hander = {
apply(target,ctx,args) {
console.log(target,ctx,args)
return 'I am the proxy'
}
}
let p = new Proxy(target,hander)
console.log(p())

打印结果:

apply()拦截proxy_vue.js

demo2:

let target = function(name="kate") {return 'I am the target' };
let hander = {
apply(target,ctx,args) {
console.log(target,ctx,args)
return 'I am the proxy'
}
}
let p = new Proxy(target,hander)
console.log(p(age=8,sex='男'))

apply()拦截proxy_前端_02

demo3

let mark = {name: 'kf', book: 'vue'}
let target = function(name="kate") {return 'I am the target' };
let hander = {
apply(target,ctx,args) {
console.log(target,ctx,args)
return 'I am the proxy'
}
}
let p = new Proxy(target,hander)
console.log(p.call(mark,age=8,sex='男'))
console.log(p.apply(mark,[age=8,sex='男']))

apply()拦截proxy_前端_03


举报

相关推荐

0 条评论