Proxy(代理,拦截器),Reflect(反射)
Proxy:
代理:
var duixaing = {
"name":"小胖",
"age":25,
"sex":"男"
}
duixaing.name="老胖";
console.log(duixaing.name);//打印:老胖。
console.log(duixaing);//打印:Object {name: "老胖", age: 25, sex: "男"}。
var obj = {
"name":"小胖",
"age":25,
"sex":"男"
}
拦截:
var porxObj = new Proxy(obj,{
set:function(traget,key,value){
if(value == "老胖"){
traget[key]=value;
}
},
get:function(traget,key){
if(traget[key]==undefined){
return "我没有该属性";
}else{
return traget[key];
}
}
});
porxObj.name="老胖";
console.log(obj);//打印:Object {name: "老胖", age: 25, sex: "男"}。
console.log(porxObj.xh);//打印:我没有该属性。
console.log(porxObj.name);//打印:老胖。
//set:设置属性;
//get:获取属性;
注释:Proxy要传两个值,第一个值是要代理的对象,第二个值是要做哪些操作;
Reflect:
var obj = {
name:"老胖",
age:21,
sex:"男"
}
//Object.defineProperty(obj,"school",{value:"师徒教育"});
定义属性:
Reflect.defineProperty(obj,"school",{value:"师徒教育"});
console.log(obj);
//让Object操作变为函数行为:
//delete obj.name;
Reflect.deleteProperty(obj,"name");
console.log(obj);
console.log(Reflect.has(obj,"age"));
//是否有没有这个属性,如果返回true,没有返回false;
Reflect对象的方法与Proxy对象的方法一一对应:
var porxObj = new Proxy(obj,{
set:function(traget,key,value){
if(value == "老胖"){
Reflect.set(traget,key,value);
}
},
get:function(traget,key){
if(traget[key]==undefined){
return "我没有该属性";
}else{
return Reflect.get(traget,key);
}
}
});
注释:Reflect一样都是es6提供的用来操作对象API(接口,文档);
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。