Proxy(代理,攔截器),Reflect(反射)

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(接口,文檔);
相關文章
相關標籤/搜索