es6的Proxy(代理)

es6的Proxy(代理)

Proxy能夠監聽對象身上發生了什麼事情,並在這些事情發生後執行一些相應的操做。一會兒讓咱們對一個對象有了很強的追蹤能力,同時在數據綁定方面也頗有用處
//代理:
var duixaing = {
    "name":"姜姜",
    "age":23,
    "sex":"女"
}
duixaing.name="筱妍";
console.log(duixaing.name);//打印:筱妍。
console.log(duixaing);//打印:Object {name: "姜姜", age: 23, sex: "女"}。

var obj = {
    "name":"妍妍",
    "age":23,
    "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: 23, sex: "女"}。
console.log(porxObj.xh);//打印:我沒有該屬性。
console.log(porxObj.name);//打印:大妍妍。
//註釋:Proxy要傳兩個值,第一個值是要代理的對象,第二個值是要作哪些操做;

Proxy對象方法列表:
方法 描述javascript

  1. handler.apply() 攔截Proxy實例做爲函數調用的操做。java

  2. handler.construct() 攔截Proxy實例做爲構造函數調用的操做。es6

  3. handler.defineProperty() 攔截Object.defineProperty操做。app

  4. handler.deleteProperty() 攔截delete刪除屬性操做。函數

  5. handler.enumerate() 此方法將被廢棄,不建議使用。ui

  6. handler.get() 攔截屬性的讀取操做。代理

  7. handler.getOwnPropertyDescriptor()攔截Object.getOwnPropertyDescriptor()操做。code

  8. handler.getPrototypeOf() 攔截獲取原型對象操做。對象

  9. handler.has() 攔截屬性檢索操做。ip

  10. handler.isExtensible() 攔截Object.isExtensible()操做。

  11. handler.ownKeys() 攔截Object.getOwnPropertyNames()操做。

  12. handler.preventExtensions() 攔截Object.preventExtensions()操做。

  13. handler.set() 攔截屬性賦值操做。

  14. handler.setPrototypeOf() 攔截Object.setPrototypeOf()操做。Proxy.revocable() 建立一個可取消的Proxy實例。

相關文章
相關標籤/搜索