function fun(person){
return new Proxy(person,{
get:function(target,property){
if(property in target){
return target[property]
}else{
//属性不存在时返回的默认值
return undefined;
}
},
set:function(target,property,value){
console.log(target,property,property in target);
if(target[property]!=value){
target[property] = value;
}else{
console.log("值没有发生变化,无需要重新赋值");
}
}
})
}
let rows = fun({name:'王雪'});
rows.name = '王雪';
rows.age = 120;
console.log(rows);
Proxy 是ES6中提供的一个非常强大的功能,可以用来代理另一个对象,从而拦截、监视并修改这个对象的各种操作
首先是Proxy()的参数:
arget:被代理的对象。
handler:被代理对象上的自定义行为,也就是对arget进行处理的地方
handler处理函数一都有:
get(target, propKey, receiver):拦截对象属性的读取操作。
set(target, propKey, value, receiver):拦截对象属性的设置操作,返回一个布尔值
has(target, propKey):拦截 propKey in proxy 操作,返回一个布尔值
deleteProperty(target, propKey):拦截对象属性的删除操作,返回一个布尔值
apply(target, object, args):拦截 Proxy 实例作为函数调用的操作。
construct(target, args, newTarget):拦截 Proxy 实例作为构造函数调用的操作,返回一个对象
网友评论