function fun(person){
return new Proxy(person,{
get:function(target,property){
if(property in target){
return target[property]
}else{
//屬性不存在時返回的默認(rèn)值
return undefined;
}
},
set:function(target,property,value){
console.log(target,property,property in target);
if(target[property]!=value){
target[property] = value;
}else{
console.log("值沒有發(fā)生變化筋搏,無需要重新賦值");
}
}
})
}
let rows = fun({name:'王雪'});
rows.name = '王雪';
rows.age = 120;
console.log(rows);
Proxy 是ES6中提供的一個非常強大的功能扳缕,可以用來代理另一個對象饰潜,從而攔截硝烂、監(jiān)視并修改這個對象的各種操作
首先是Proxy()的參數(shù):
arget:被代理的對象箕别。
handler:被代理對象上的自定義行為,也就是對arget進行處理的地方
handler處理函數(shù)一都有:
get(target, propKey, receiver):攔截對象屬性的讀取操作滞谢。
set(target, propKey, value, receiver):攔截對象屬性的設(shè)置操作串稀,返回一個布爾值
has(target, propKey):攔截 propKey in proxy 操作,返回一個布爾值
deleteProperty(target, propKey):攔截對象屬性的刪除操作狮杨,返回一個布爾值
apply(target, object, args):攔截 Proxy 實例作為函數(shù)調(diào)用的操作母截。
construct(target, args, newTarget):攔截 Proxy 實例作為構(gòu)造函數(shù)調(diào)用的操作,返回一個對象