3

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对象方法列表:
方法 描述

  1. handler.apply() 拦截Proxy实例作为函数调用的操作。

  2. handler.construct() 拦截Proxy实例作为构造函数调用的操作。

  3. handler.defineProperty() 拦截Object.defineProperty操作。

  4. handler.deleteProperty() 拦截delete删除属性操作。

  5. handler.enumerate() 此方法将被废弃,不建议使用。

  6. handler.get() 拦截属性的读取操作。

  7. handler.getOwnPropertyDescriptor()拦截Object.getOwnPropertyDescriptor()操作。

  8. handler.getPrototypeOf() 拦截获取原型对象操作。

  9. handler.has() 拦截属性检索操作。

  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实例。


姜筱妍
269 声望10 粉丝

君生我未生,我生君已老。


下一篇 »
es6的Reflect