Proxy(代理,攔截器),Reflect(反射)es6
Proxy:函數
代理:ui
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:code
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(接口,文檔);