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对象方法列表:
方法 描述
handler.apply() 拦截Proxy实例作为函数调用的操作。
handler.construct() 拦截Proxy实例作为构造函数调用的操作。
handler.defineProperty() 拦截Object.defineProperty操作。
handler.deleteProperty() 拦截delete删除属性操作。
handler.enumerate() 此方法将被废弃,不建议使用。
handler.get() 拦截属性的读取操作。
handler.getOwnPropertyDescriptor()拦截Object.getOwnPropertyDescriptor()操作。
handler.getPrototypeOf() 拦截获取原型对象操作。
handler.has() 拦截属性检索操作。
handler.isExtensible() 拦截Object.isExtensible()操作。
handler.ownKeys() 拦截Object.getOwnPropertyNames()操作。
handler.preventExtensions() 拦截Object.preventExtensions()操作。
handler.set() 拦截属性赋值操作。
handler.setPrototypeOf() 拦截Object.setPrototypeOf()操作。
Proxy.revocable() 创建一个可取消的Proxy实例。