Proxy方法
实现对象代理,能检测对象属性变化以及保持属性类型不变
答案:https://juejin.cn/post/7449648346119651379
Proxy trap(handler)规范:只有get和set需要绑定receiver(this),区别在于,“是否需要上下文信息”,需要知道“谁在做这个”,也就是需要根据进行get和set的人的身份的不同,来进行不同的操作。
js
class myProxy{
constructor(target,handler){
this.target = target;
this.handler = handler;
}
get(key){
if(this.handler.get){
return this.handler.get(this.target,key,this)
}
return this.target[key]; // 在没有handler的时候提供默认兜底
}
set(key,value){
if(this.handler.set){
return this.handler.set(this.target,key,value,this)
}
return this.target[key] = value;
}
}
const target = {
message = ""
}
const handler = {
get(key,receiver){ // receiver接收this来绑定上下文
if(key in target){
return target[key]
}
return undefined
}
set(key,value,receiver){
if(key in target){
target[key] = value
return true
}
return false
}
}