es6代理 proxy 學習
深入淺出es6裏面有詳細介紹代理 深入淺出es6:http://www.infoq.com/cn/es6-in-depth/
以下是本人的 實際測試例子。
代理的基本用法。
// proxy = new Proxy(target,hander)
// 代理調用的方法,就是調用目標對象的方法,或者是被重寫的14中句柄對象中的方法。
//hander中的14個方法是Object內定的14個方法
// 如果重寫set,get就會重新定義.的行為,可以阻止賦值取值操作,同樣的可以輕松的監聽屬性的變化,類似於Object.defineProperty(obj,key,{set,get})中的set,get
(function(){
var target={c:12,d:33};
var proxy = new Proxy(target,{
get:function(target,key,receiver)
{
console.log("get...")
return Reflect.get(target,key,receiver);
},
set:function(target,key,value,receiver){
console.log("set...")
}
})
// proxy.account=1;
// console.log(proxy.account);
console.log(proxy.c);
})() ;
(function(){
//代理可以實現自動填充屬性,原理是監聽賦值操作,發現沒有就創建一個
function Tree() {
return new Proxy({}, handler);
}
var handler = {
get: function (target, key, receiver) {
if (!(key in target)) {
target[key] = Tree(); // 自動創建一個子樹
}
return Reflect.get(target, key, receiver);
},
};
var tree=Tree();
tree.aa.aa.aa.aa=1;
})();
es6代理 proxy 學習