//代理: 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
handler.apply() 攔截Proxy實例做爲函數調用的操做。java
handler.construct() 攔截Proxy實例做爲構造函數調用的操做。es6
handler.defineProperty() 攔截Object.defineProperty操做。app
handler.deleteProperty() 攔截delete刪除屬性操做。函數
handler.enumerate() 此方法將被廢棄,不建議使用。ui
handler.get() 攔截屬性的讀取操做。代理
handler.getOwnPropertyDescriptor()攔截Object.getOwnPropertyDescriptor()操做。code
handler.getPrototypeOf() 攔截獲取原型對象操做。對象
handler.has() 攔截屬性檢索操做。ip
handler.isExtensible() 攔截Object.isExtensible()操做。
handler.ownKeys() 攔截Object.getOwnPropertyNames()操做。
handler.preventExtensions() 攔截Object.preventExtensions()操做。
handler.set() 攔截屬性賦值操做。
handler.setPrototypeOf() 攔截Object.setPrototypeOf()操做。Proxy.revocable() 建立一個可取消的Proxy實例。