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实例。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。