Proxy是指在目标对象上,架设一个拦截层,外界对象要访问对象都要先通过这个拦截层
1.get方法
get用于读取某个属性的读取操作
let person = {
name:'影久'
}
设置拦截
let proxy = new Proxy(person,{
get(target,property,receiver){
if(property in target){
console.log(1)
return target[property]
}else {
throw new Error('不存在'+property+'在'+target+'中')
}
}
})
proxy.name // 影久
proxy.age // '不存在age在person中'
2.set方法
set(target,prop,value){
if(prop === 'age'){
if(!Number.isInteger(value)){
throw new TypeError('the age is not an iterage')
}else {
console.log(true)
target[prop] = value
}
}
}
proxy.age = 5 //true
3.apply方法
拦截一个函数,当函数调用、apply、call的时候,就去调用
let fn = function () {return 'fn'}
let twice = {
apply(target,ctx,value){
console.log(target,ctx,value)
return 'twice'
}
}
let pro = new Proxy(fn,twice)
4.has方法
let handle = {
has(target,key){
if(key[0] === '_'){
return false
}
return key in target
}
}
let objj = {
_pro:"foo",
pro:2
}
let p = new Proxy(objj,handle)
'_pro' in p
5.construct方法
当拦截了一个函数要new的时候,加以拦截
let p = new Proxy(function(){},{
construct(target,args){
console.log(args)
return {value:args[0] * 10}
}
})
console.log((new p(3)).value)
还有类似的方法
deleteProperty()
defineProperty()
getPropertyOf()
等等